重命名git存储库中所有提交的文件

Yor*_*ork 21 git

我想重命名git存储库中所有提交的文件,这是我尝试过的:

git filter-branch --index-filter 'git mv -k <old name> <new name>' HEAD
Run Code Online (Sandbox Code Playgroud)

此命令遍历了存储库中的所有提交,但最终得到了消息

警告:参考'refs/heads/master'保持不变

这意味着没有任何改变.这里出了什么问题?

请注意,这是我想重命名不存在从第一次提交的文件,因此,如果我不使用-kgit mv,我的意思是,如果我使用:

git filter-branch --index-filter 'git mv <old name> <new name>' HEAD`
Run Code Online (Sandbox Code Playgroud)

尝试第一次提交时,Git会出错,说"糟糕的源......".

Yor*_*ork 21

我终于使用以下方法解决了原来的问题:

git filter-branch --tree-filter '
if [ -f <old name> ]; then
  mv <old name> <new name>
fi' --force HEAD
Run Code Online (Sandbox Code Playgroud)

  • 有关使用`--index-filter`的解决方案,请参阅[此答案](http://stackoverflow.com/a/15029691/572644) (4认同)
  • 将`if [-f <old name>]`替换为`if [-d <old name>]`来重命名目录而不是文件. (3认同)
  • 请注意,`git mv`不能与索引过滤器一起使用,因为`git mv`需要一个工作副本,你只能使用树过滤器. (2认同)

Ben*_*cre 7

现在最好使用filter-repo - https://github.com/newren/git-filter-repo

git filter-repo --path-rename full/path/to/file.old:full/path/to/file.new
Run Code Online (Sandbox Code Playgroud)

请参阅我自己的博客页面:http://ben.goodacre.name/tech/Rename-file-for-all-previous-commits-in-Git