我想重命名git存储库中所有提交的文件,这是我尝试过的:
git filter-branch --index-filter 'git mv -k <old name> <new name>' HEAD
Run Code Online (Sandbox Code Playgroud)
此命令遍历了存储库中的所有提交,但最终得到了消息
警告:参考'refs/heads/master'保持不变
这意味着没有任何改变.这里出了什么问题?
请注意,这是我想重命名不存在从第一次提交的文件,因此,如果我不使用-k的git mv,我的意思是,如果我使用:
git filter-branch --index-filter 'git mv <old name> <new name>' HEAD`
Run Code Online (Sandbox Code Playgroud)
尝试第一次提交时,Git会出错,说"糟糕的源......".
我有一个git repo,其中一些文件的名称只有不同的分支.
作为一个简单的例子,在master中,有一个文件alpha/beta/foo.cpp,在分支中bar,有一个file alpha/beta/Foo.cpp.
问题是,当我尝试切换分支时,git将不允许我这样做.有一个错误,我目前没有方便,但它基本上看起来像
对文件alpha/beta/Foo.cpp的更改将被覆盖 - 中止
即使后续git status显示工作目录是干净的.
由于此repo尚未共享(它实际上是我正在进行迁移的大型Perforce软件仓库的镜像),我认为使用git filter-branch重写历史记录没有任何问题,但是当我这样做时,我做了任何区分大小写的更改迷路了.
我用的时候
git filter-branch -f -d /tmp/tmpfs/filter-it \
--tree-filter path/to/script \
--tag-name-filter cat --prune-empty -- --all
Run Code Online (Sandbox Code Playgroud)
脚本看起来像这样
#!/bin/bash
if [ -e alpha/beta/foo.cpp ] ; then
mv alpha/beta/foo.cpp alpha/beta/Foo.cpp
fi
Run Code Online (Sandbox Code Playgroud)
最终的结果是重写refs(预期),但文件本身实际上并没有像我期望的那样在两个分支上重命名.
有什么建议?