git子树和git filter-banch之间的区别

时间:2013-05-19 10:18:13

标签: git

这两个命令有什么区别吗?

git subtree split --prefix=some_subdir -b some_branch

git filter-branch --subdirectory-filter some_subdir some_branch

我想使用git filter-branch代替git subtree,因为我还想删除新分支中的一些文件,但我担心这种保证,git subtree也是如此,可能对git filter-branch无效:

  

保证完全相同历史的重复分割   相同(即产生相同的提交ID)。因此,如果   你添加新的提交然后重新拆分,新的提交将是   在上次生成的历史记录中作为提交附加,所以   'git merge'和朋友们将按预期工作。

1 个答案:

答案 0 :(得分:3)

filter-branch绝对没有给出任何这样的保证,所以在使用它时你肯定是在希望方面。但子目录过滤器具有完全可重现的结果,filter-branch不会触及提交信息(提交和作者时间戳和人)。由于这是创建提交sha的信息,filter-branch 应该再次生成相同的历史记录。

只要filter-branch没有开始做出任何保证,那就是你所能获得的,而这似乎不太可能。