Git:如何在Windows上重命名目录(仅更改大小写)

43

我想在Windows系统上更改Git版本控制下的目录名称(更改目录名大小写):

$ git mv docs DOCS
Rename from 'docs' to 'DOCS/docs' failed. Should I try again? (y/n) n
fatal: renaming 'docs' failed: Permission denied

我也尝试了使用强制选项,但结果相同:

$ git mv --force docs DOCS
Rename from 'docs' to 'DOCS/docs' failed. Should I try again? (y/n) n
fatal: renaming 'docs' failed: Permission denied

由于某种原因,Git认为DOCS已经是一个现有的目录并且该目录应该移动到其中。我知道我可以使用临时目录名称重命名和提交,然后再将其重命名和修改提交到最终名称,但是难道没有一种方法可以告诉Git我不想移动到任何其他目录中吗?

这个回答解决了你的问题吗?我更改了一个目录的大小写,但Git似乎没有注意到 - samm
4个回答

71

您可以尝试分为两步来完成。

$ git mv docs DOCS2
$ git mv DOCS2 DOCS

它会运行


4
为什么 Git 不能在内部完成这个操作? - Thomas S.
1
Git最初是为Linux系统开发的,该系统区分大小写。而Windows则不区分大小写。在Windows中,无法在同一位置拥有名称为“ABC”和“abc”的两个文件夹。问题并非出在Git本身,任何在Windows下没有明确解决此问题的应用程序(如SVN或其他应用程序)都会出现相同的行为。问题出在操作系统上。 - Pierre-Luc Dupont
3
问题不在于操作系统,因为Windows可以将目录从docs重命名为DOCS或Docs。这是一个工具的问题,该工具不支持大小写不敏感、保留大小写的文件系统。 - Thomas S.
1
这取决于文件系统,而不是操作系统。在Linux或OS X上,您也可能会遇到大小写不敏感/大小写保留的文件系统问题。 - Thomas S.
2
在我看来,你可以认为git在Windows上已经必须以不同的方式处理事情了。我同意,在Windows上重命名文件时,git检测到变化存在问题,但如果你使用git mv,它应该能够正常工作。我认为开发人员可能只是对实现这个特殊情况没有兴趣。更像是“我们来自Linux,这就是它的工作方式”。 - Oliver Schimmer
显示剩余5条评论

0

我尝试使用TortoiseGit的重命名、命令提示符中的git mv以及git bash中的git mv来重命名我的目录。移动命令是mv Status status或git mv Status status2,它们都回应“失败:权限被拒绝”。所以看来我要么必须删除git存储库并创建一个具有新目录名称结构的新存储库,要么就要创建一个Linux虚拟机,将其克隆下来,并在其中尝试重命名。似乎在Windows下只能重命名文件,而目录则会失败。至于那些说git mv对他们有效的人,你们的设置肯定有缺失。


-1

由于Windows区分大小写,您无法将文件重命名为相同的字母。(Docs == docs [忽略大小写])

您可以使用git bash进行操作,因为git bash是cygwin,它是一个Unix模拟器,所以它区分大小写。

命令是git mv。

git mv <old name> <new name>

这是一个来自git bash的演示(Windows 7) 在此输入图像描述

1
请尝试使用目录再次操作。 - Thomas S.
在Windows 10中使用图形界面,如果只更改文件或目录的大小写命名,则显示的名称将保持原始大小写。如果再次单击该文件或目录,则新的大小写将显示在编辑框中,但它仍会返回到原始大小写。因此,尽管可能更改了大小写,但似乎大小写没有变化。可以通过打开命令提示符并使用dir命令来显示。显示的大小写与资源管理器窗口中显示的大小写并不总是一致。 - Quentin 2

-2

不行。没有办法告诉Git你不想将文件夹移动到其他目录中。

这不是Git的限制,而是Windows和NTFS的限制。因为文件系统不区分大小写,它报告新名称的大小写更改已经存在,这导致了你遇到的行为。尝试使用两步重命名(使用临时名称),然后提交,或在非Windows(技术上基于区分大小写的文件系统)计算机上更改它。


4
你的第一句话可能不正确,因为在Windows资源管理器中,我只需更改大小写就可以轻松重命名目录。 - Thomas S.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接