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

当我尝试重命名目录从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),为什么我不能简单地重命名目录?


当前回答

使用-f选项强制执行:

git mv -f FOO foo

其他回答

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

$ git config core.ignorecase false

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

我能够解决这个问题,使用git 1.7.7通过使用临时文件名:

$ git mv improper_Case improve_case2
$ git mv improve_case2 improve_case
$ git commit -m "<your message>"

(无 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时,你会看到一些重命名的:行。检查它们并确保它们看起来正确,如果是这样,您就可以正常提交更改。

这是一个快速且安全的解决方案:

git mv -f path/to/foo/* path/to/FOO/

警告!始终重命名重命名文件夹中的所有文件(使用/*)。

不要重命名单个文件。这将导致一个错误,在这个答案中描述。

如果你想先看到结果,使用-n:

git mv -f -n path/to/foo/* path/to/FOO/

在你完成mv之后:

提交修改 签出到任何其他修订 结帐。

现在Git应该在内部文件和文件系统中都重命名了文件夹。

这里有一个简单的方法。

确保您的工作目录为空。 暂时禁用git忽略大小写

git config core.ignorecase false

重命名任何目录(例如Folder => Folder) 向工作目录添加更改

git add --all

保存您的更改。

git stash

原来的目录现在应该被删除。进行本地提交。

git add --all
git commit -m "Rename directories"

流行的变化

git stash pop

将此修改为之前的提交。

git add --all
git commit --amend

您现在应该有一个重命名目录的提交。你现在可以恢复原来的ignorecase配置:

git config core.ignorecase true