2

我有一个 git 存储库,其中包含一个在 windows 下名称无效的文件:

foo/bar/baz|quux

由于我想在不重新启动的情况下解决问题,因此我尝试了以下命令:

git clone -n ssh://example.com/home/me/repo.git
git mv "foo/bar/baz|quux" "foo/bar/baz-quux"

但我得到的只是:

fatal: bad source, source=foo/bar/baz|quux, destination=foo/bar/baz-quux

我最终在 linux 下运行了该命令,并带有一个签出的 repo(git clone没有-n),并且 id 就像一个魅力,所以我猜这个fatal错误是由于文件没有在 windows 下签出(因为我无法检查)。

那么我将如何运行git mv --index "foo/bar/baz|quux" "foo/bar/baz-quux"它只修改索引,但忽略文件不在磁盘上的事实?该选项--index不适用于git mv,我尝试过-f但失败并显示相同的消息。

4

1 回答 1

2

我找到了一个解决方案:

git clone -n ssh://example.com/home/me/repo.git

# Create foo/bar since the checkout -n didn't create it
mkdir -p foo/bar/

# Create the new file
git show "foo/bar/baz|quux" > "foo/bar/baz-quux"
git add "foo/bar/baz-quux"

# Remove the old file in the index
git rm --cached "foo/bar/baz|quux"

git commit -m "Moved file with invalid name."

请注意,这不允许轻松移动名称无效的目录——您必须移动git show origninal-name > new-name每个文件(尽管如果有很多文件,一个小的 shell 脚本可能会有所帮助)。

于 2013-09-25T13:34:23.590 回答