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

当我尝试重命名目录从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像正常一样提交。 利润。

我有一个相关的问题。

一个文件夹名为“Pro”(先创建的),另一个名为“Pro”(错误创建的)。在Mac中,这是同样的事情,但根据git不同。

$ git config core.ignorecase false

git配置将文件重命名到正确的文件夹(谢谢),并在“pro”中创建了幽灵文件(不!!)我不能添加鬼文件更改轨道,我不能签出其他分支,除非携带这些文件与我,我也不能以某种方式重置它。

相反,我做了

$ git rm -r --cached pro
$ git status // => pro files removed, new Pro files untracked
$ git add Pro

为了使它更加安全,我在一个单独的固定分支中完成了它,然后我合并回主分支

对于幽灵文件问题,有大师可以解释如何和为什么? 提前谢谢你。

这里有一个简单的方法。

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

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

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

感谢Adam的回答。

使用-f选项强制执行:

git mv -f FOO foo