gpt4 book ai didi

git - filter-branch --index-filter 总是以 "fatal: bad source"失败

转载 作者:太空狗 更新时间:2023-10-29 12:57:33 25 4
gpt4 key购买 nike

因此,我尝试使用 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
#

我敢肯定,我在这里遗漏了一些重要的东西——但它是什么?

最佳答案

正如 twalberg 在他的回答中指出的那样,git mv 不仅访问索引,它还访问磁盘。这可能就是它不起作用的原因。

我不想使用缓慢的 --tree-filter 所以我尝试更改 git filter-branch 手册页中的示例,它显示了如何将完整的存储库移动到子文件夹中。

结果是这样的 - 它确实有效 ;-)

git filter-branch --index-filter '
git ls-files -s | \
sed "s-\(\t\"*\)my_file.txt-\1your_file.txt-" | \
GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info && \
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
' HEAD

关于git - filter-branch --index-filter 总是以 "fatal: bad source"失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15028580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com