虽然我发现了类似的问题,但我没有找到问题的答案

当我尝试重命名目录从FOO到FOO通过git mv FOO FOO我得到

fatal: renaming 'FOO' failed: Invalid argument

好的。我试试gitmv FOO foo2 && gitmv foo2 FOO

但当我尝试通过git commit提交时。我得到

# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)

当我通过git添加目录时,添加foo没有任何变化,git提交。又给了我同样的信息。

我做错了什么?我认为我正在使用区分大小写的系统(OSX),为什么我不能简单地重命名目录?


当前回答

这对我来说在Windows上运行得很好。使用powershell与以下:

\temp . mv .\文件夹-大小写错误 git添加-A Git提交-m "重命名文件夹时使用错误的大小写为temp" mv .\temp .\ folder -with- correct -套管 git添加-A git commit - modify -m "重命名为合适的大小写" (可选)git push

感谢Adam的回答。

其他回答

你不会在OS X中使用区分大小写的文件系统,除非你明确地选择这样做。HFS+可以区分大小写,但默认情况下是不区分大小写的。

你要设置选项核心。ignorecase变为false,这将使Git注意不支持它的文件系统的case。在你的回购中启用:

$ git config core.ignorecase false

然后你可以用git mv重命名文件,它会像预期的那样工作。

(无 git mv 变体。

我在Mac OS X 10.9上的Git中遇到了这个问题。我是这样解决的:

Git rm -r——缓存/路径/到/目录

这将在Git中逐步删除目录,但并不实际删除任何物理文件(——cached)。这也使得目录(现在有了正确的大小写)显示在未跟踪的文件中。

所以你可以这样做:

mv /path/to/directory /path/to/DIRECTORY
git add -A /path/to/DIRECTORY

Git会识别你重命名了文件,当你执行Git status时,你会看到一些重命名的:行。检查它们并确保它们看起来正确,如果是这样,您就可以正常提交更改。

改进Adam Dymitruk的答案(SO不让我评论他的答案很愚蠢),使用“git mv”将自动准确地呈现移动的文件。不需要存储,并且可以避免有风险的“git add -A”:

old="abc";    new="ABC";
tmp="$old-renamed";
git mv "$old" "$tmp";
git commit -m "Renamed '$old' to '$tmp'.";
git mv "$tmp" "$new";
git commit --amend -m "Renamed '$old' to '$new'.";

这里有一个关于这个页面上所有gitfoo的非常简单的解决方案。

手动从项目中复制文件。 Git rm所有文件。 Git像正常一样提交。 手动重新添加文件。 Git添加所有文件。 Git像正常一样提交。 利润。