什么时候需要为“git filter branch”使用“--tag name filter cat”?
什么时候需要为“git filter branch”使用“--tag name filter cat”?,git,git-filter-branch,Git,Git Filter Branch,git filter branch的手册页显示: use "--tag-name-filter cat" to simply update the tags. 后来它甚至说: use --tag-name-filter cat -- --all 但是,--all应该包括--tags,因此所有的标签都应该被正确地重写 一个小测试验证了这一点: $ git init $ mkdir dir $ touch dir/file $ git add . $ git commit -am init $
git filter branch
的手册页显示:
use "--tag-name-filter cat" to simply update the tags.
后来它甚至说:
use --tag-name-filter cat -- --all
但是,--all
应该包括--tags
,因此所有的标签都应该被正确地重写
一个小测试验证了这一点:
$ git init
$ mkdir dir
$ touch dir/file
$ git add .
$ git commit -am init
$ git ls-files
dir/file
$ git tag tag
$ git for-each-ref
3006eb0a031e40901122ac8984c85ad533982f8b commit refs/heads/master
3006eb0a031e40901122ac8984c85ad533982f8b commit refs/tags/tag
$ git filter-branch --subdirectory-filter dir -- --all
Rewrite 3006eb0a031e40901122ac8984c85ad533982f8b (1/1)
Ref 'refs/heads/master' was rewritten
Ref 'refs/tags/tag' was rewritten
$ git for-each-ref
8e5f09c93a2fbdb435dbe7019abeb841cb5857b2 commit refs/heads/master
3006eb0a031e40901122ac8984c85ad533982f8b commit refs/original/refs/heads/master
3006eb0a031e40901122ac8984c85ad533982f8b commit refs/original/refs/tags/tag
8e5f09c93a2fbdb435dbe7019abeb841cb5857b2 commit refs/tags/tag
因此,问题是:
在哪种情况下我需要--标签名称过滤器cat
还有,但我不知道如何进入这种情况。您需要“--tag name filter
”用于git filter branch
,任何时候您希望它实际更新/创建您的标记,而不是创建那些标记指向的重写提交。为开关提供的命令是一个shell脚本,它获取旧标记名作为输入,并传递给“--tag name filter
”,以计算出您希望新标记名是什么
例如,如果您有一个名为“work by sun”的标记,并且使用了“--tag name filter sed s/sun/oracle/
”,那么将创建一个名为“work by oracle”的新标记,而不是更新该标记
更正常的情况是,如果使用“--tag name filter cat
”,则命令仅为cat
,并且使用的标记名与原始标记相同-因此标记将被覆盖以指向新提交
命令行参数的“--all
”部分指定应该重写哪些引用,但除非使用--tag name过滤器
参数,否则不会更新标记
如果所有这些看起来有点烦躁,你可能想考虑是否能用.实现你想要的。
充分披露:我是BFG回购清洁剂的作者。在上述示例中,标签
标签与参考参考/原件/refs/tags/tag
是否完全相同?即使没有--标记名过滤器
,标记标记
也会指向过滤器分支后的新提交。