gpt4 book ai didi

Git子树 merge 策略,可以不 merge 历史吗?

转载 作者:太空狗 更新时间:2023-10-29 13:31:47 24 4
gpt4 key购买 nike

我一直在尝试摆脱子模块以获得独立的存储库,而 subtree merge strategy似乎符合这个用例。

但是 merge 后的 repo 历史出现在我自己项目的历史中,这很烦人。

我已经尝试了 git filter-branch --subdirectory-filter path/to/subtree/HEAD 这有效...直到我尝试使用 git pull -s 更新子树subtree my-subtree master 将所有子树的文件重写到我项目的根目录。

有没有办法在 git 中本地实现这个?

最佳答案

apenwarrgit subtree有一个 --squash 选项,它几乎可以满足您的需求。

remote=libfoo
branch=master
prefix=helpers/libfoo

git fetch "$remote" &&
git subtree add --prefix="$prefix" --squash "$remote/$branch"

: Later, once there are changes to pick up.
git subtree pull --prefix="$prefix" --squash "$remote" "$branch"

git subtree 在它生成的提交的提交消息中记录额外的信息;这个额外的信息允许它有效地进行 merge ,而不必 merge 被 merge 的子树的实际历史。


如果您知道您永远不会对“ super ”存储库中的子树进行任何更改(即子树中的所有更改将始终来自其他某个存储库),那么您可以不用 git subtree 并重复子树 merge 方法的 git read-tree --prefix= 部分(尽管您必须先从两个索引中清除当前子树)。

remote=libfoo
branch=master
prefix=helpers/libfoo/

: replace the local subtree with whatever the other repository has
git fetch "$remote" &&
git rm -r --ignore-unmatch "$prefix" &&
git read-tree --prefix="$prefix" "${remote}/${branch}" &&
git checkout -- "$prefix" &&
git commit -m "update $prefix from $remote $branch"

关于Git子树 merge 策略,可以不 merge 历史吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3739393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com