git过滤器分支和git子树之间的区别?

时间:2016-08-03 05:36:41

标签: git git-subtree git-filter-branch

正在搜索扔SO以获得答案。碰到这个老线程似乎没有给出任何答案。重新触发这个线程,希望有人知道!

有人可以告诉我b / w git子树和git filter-branch的区别吗? 我将在原始问题中使用相同的示例:

git subtree split --prefix=some_subdir -b some_branch

git filter-branch --subdirectory-filter some_subdir some_branch

1 个答案:

答案 0 :(得分:5)

是的,git subtree(一个贡献shell)可用于拆分回购,如Using Git subtrees for repository separation中“Stu Campbell”中所述。

您需要删除已在拆分文件夹中复制的代码:

git subtree split --prefix=path/to/code -b split
git push ~/shared/ split:master
git rm -r path/to/code
git commit -am "Remove split code."

这与git filter-branch(本机Git命令)不同,它重写了repo历史记录,只记录了那些实际影响特定子目录内容的提交。

含义:git rm运行后,filter-branch没有代码 git filter-branch不会像git subtree split那样重复提交:它会删除(“过滤掉”)与某个条件不匹配的所有内容(此处为子文件夹路径)