git filter-branch子目录-filter与git subtree split -P之间的区别

问题描述 投票:0回答:1

我试图了解特定用例的git subtree split和git filter-branch之间的区别。这个问题类似于Difference between git filter branch and git subtree?,但不完全相同。

给出带有/ sub / folder的仓库,执行以下命令:

git checkout master
git checkout -b subtree-branch-1
git filter-branch --subdirectory-filter sub/folder

您最终得到一个分支,该分支仅具有适用于/ sub / folder的提交。现在让我们重新开始:

git checkout master
git subtree split -P sub/folder -b subtree-branch-2
git checkout subtree-branch-2

对我来说,我看起来完全一样。 TortoiseGit的修订图看起来相同(https://lnk2.tk/iqtvg),这两个分支的日志看起来相同,并且工作目录看起来相同。我发现了很多问题/帖子试图解释filter-branch和subtree split之间的区别,但是基于以上内容,我只是没有看到它。如果它们确实产生相同的结果,那么引入子树split -P的意义何在?它基本上只是filter-branch --subdirectory-filter的别名吗?

git git-subtree git-filter-branch
1个回答
0
投票

简短部分就像您在comment summary中输入的一样:

...在我上面的用例中没有区别。

但是,一般建议是使用git subtree:它更直接,更不易出错,并且即使git filter-branch stops有一天能工作也应该继续工作。

更多详细信息

基本上,您已经独立地重新发现了git subtree命令的产生方式:各种用户都希望使用他们现有的存储库,提取其中的一部分(通常是一个库),并将其导出为新的Git存储库。 git filter-branch命令可以做到这一点,所以这就是他们所做的。

[这很受欢迎,也足够有用,git filter-branch增长了一个名为--subdirectory-filter的过滤器专门用于这项工作。参见Johannes Schindelin在2007年发布的commit 685ef546b62d063c72b401cd38b83a879301aac4,该版本首次在Git版本1.5.3中发布。

[子树拆分本身本身还远远不够(并且685ef546b62d063c72b401cd38b83a879301aac4是一种危险的功能强大的工具),所以2009年4月,Avery Pennarun从git filter-branch开始引入了git subtree命令,作为该工具的实验脚本。 1.7.11版本候选。这实现了拆分,并且几乎立即实现了commit 0ca71b3737cbb26fbf037aa15b3f58735785e6e30ca71b3737cbb26fbf037aa15b3f58735785e6e3。第一个实际安装的版本(而不是随Git一起分发的附件)是Ben Walton的--rejoin。所有这些都在Git 1.7.11中发布。

最近,add本身已被正式弃用:难以正确,缓慢地使用,并且通常不太好。一个新的commit 0d31de303f9e8e28cc1649dbf41c1cc635bae2d8命令更快,更有用,尽管它确实需要您了解足够的Python才能使用它,并且它仍然不随Git一起分发。但是,具有特定目的而不是一般目的的0d31de303f9e8e28cc1649dbf41c1cc635bae2d8将坚持存在,并且即使git filter-branch实际上完全替代git filter-repo,将来也应具有相同的用法。

© www.soinside.com 2019 - 2024. All rights reserved.