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

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


当前回答

改进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像正常一样提交。 利润。

这里有一个简单的方法。

确保您的工作目录为空。 暂时禁用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

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

改进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'.";

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

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