如何运行`git mv--index`(git mv上没有--index选项)

如何运行`git mv--index`(git mv上没有--index选项),git,invalid-characters,Git,Invalid Characters,我有一个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

我有一个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
),我的工作非常出色,所以我猜
致命的
错误是由于文件没有在windows下签出(因为我无法签出)

那么我如何运行
git mv--index“foo/bar/baz | qux”“foo/bar/baz qux”
,这样它只修改索引,而忽略文件不在磁盘上的事实?选项
--index
不适用于
git mv
,我尝试了
-f
,但失败了,出现了相同的消息。

我找到了一个解决方案:

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 orignal name>new name
每个文件(尽管如果有许多文件,一个小的shell脚本可能会有所帮助)。

8.3文件名有效吗?我认为在这种情况下应该是
bazzuu~1
,但是使用
dir/x
git mv
检查实际上就是
git rm
git add
(重命名不记录为“重命名”操作,它们是动态重新计算的),所以如果您可以使用
add
rm
完成这项工作,就足够了。我不知道这对Windows来说有多困难;我尽量避免使用Windows…@tom我认为这不会改变任何事情:我无法签出文件,所以即使文件不存在,我也需要移动它。@torek感谢您的提醒,我找到了一个解决方案,使用
git show old name>new name
签出新名称的旧文件,和
git添加新名称
,然后是
git rm——缓存的旧名称
。不过,对于名称不好的目录来说,这并不好。@GeorgesDupéron抱歉,我误解了这个问题。关于重命名目录,我认为这可以使用以下方法的组合来完成,并且可能还可以。请参阅以获取介绍。