所以,我正在尝试使用 git filter-branch --index-filter
重命名我的存储库中的文件夹,但我总是遇到“致命错误:坏源”的错误。
这个问题可以通过在测试存储库中使用一个文件而不是一个文件夹来轻松演示。
准备工作:
$ git init
$ echo whatever >> my_file.txt
$ git add .
$ git commit -m "initial"
$ echo whatever2 >> my_file2.txt
$ git add .
$ git commit -m "second"
现在,我正在尝试将
my_file.txt
更改为your_file.txt
:$ git filter-branch --index-filter 'git mv my_file.txt your_file.txt' HEAD
但它不起作用:
Rewrite dac9a2023bdf9dd0159fab46213d9e1342ae9f75 (1/2)fatal: bad source, source=my_file.txt, destination=your_file.txt
index filter failed: git mv my_file.txt your_file.txt
然而,同样执行正常的
git mv
命令却没有问题:$ git mv my_file.txt your_file.txt
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: my_file.txt -> your_file.txt
#
我确定,我在这里缺少了一些重要的东西 - 但是它是什么?
git rm [...] my_file.txt
可以正常工作... - Daniel Hilgarthgit mv
不能始终按照您的期望进行。它可能会“起作用”,但可能会给您带来意外的结果... - twalberggit mv
的作用。所有关于git rm
的示例都始终使用--cached
选项仅在索引上工作。不过,我在手册页面上找到了答案。 - Daniel Hilgarth