我想用git-filter-branch重写存储库的git历史记录,以在所有文件中将所有出现的“ foo.bar”替换为“ bar.foo”。
我该如何实现?
更新:
我正在使用--tree-filter参数,并且已经可以用以下命令替换指定文件中的单词:
git filter-branch -f --tree-filter '
if [ -f testfile ]
then
sed -i s/foo.bar/bar.foo/g testfile
fi ' -- --all
这似乎是我所能达到的最接近的目标。
树过滤器在要过滤的每一棵树上运行,一次一棵树。
就其效果而言,您可以想象它已经完成:
git checkout <rev>
这样工作目录现在包含与给定修订版关联的树。(实际上,它确实将每个修订都签入了一个临时目录,这就是为什么它这么慢的原因。另请参见-d
标志。)如果要对树中的每个文件进行更改,则可以执行以下操作:
find . -type f -print | xargs sed -i '' -e 's/foo\.bar/bar.foo/g'
特别件事--tree-filter
是,它会自动执行任何所需的git add
和/或git rm
(因此-i ''
,-i .bak
将git add
所有的.bak
文件)。
(请记住,--tag-name-filter
如果您有标签,请使用该标签,并注意在带注释的标签上删除签名。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句