通过Git bash在Windows上更改文件夹大小写

46

我需要更改文件夹的大小写。最初,我尝试重命名文件夹,但是Git没有捕捉到这些更改。所以我尝试使用git mv -f controller Controller,但是出现以下错误:

fatal: 重命名'application/classes/controller'失败:权限被拒绝

我已经尝试设置全局 ignorecase 标志:

git config --global core.ignorecase false

但仍然无法工作。一些人建议将文件夹移出 repo、删除,然后重新添加,但当其他人 pull repo 时,这种更改是否会被捕获?还有其他我可以尝试的吗?

编辑:对于文件有效,但对于文件夹无效。


11
权限被拒绝可能是因为你的资源管理器窗口或命令行客户端当前目录是该文件夹,从而阻止了重命名。确保这不是情况,并重试。 - Daniel Hilgarth
3
问题在于Windows文件系统确实是区分大小写的。将controller移动到Controller会将其移动到自身中。解决方案可能是先将其移动到临时位置,然后再改为正确的名称。或者使用一个好的操作系统;-) - Michael Wild
1
@MichaelWild NTFS是区分大小写的,它可以完美地处理更改大小写的重命名。肯定有其他阻碍事情的因素,可能像Daniel建议的那样是一些资源管理器窗口。 - Barend
1
可能是git-mv(或者更低级别的MSYS甚至CRT库)实现重命名的方式有问题。我在这里尝试了一下,重命名也失败了。然而,使用一个临时文件却可以正常工作。 - Michael Wild
1
问题似乎出现在移动文件夹时。更改文件大小写是有效的。 - xylar
4个回答

83

总结评论,您需要通过中间临时名称重命名目录。例如:

git mv controller Controller-tmp
git mv Controller-tmp Controller

我认为这与MinGW对rename(2)的实现不支持此操作有关。请参考此线程,了解CRT rename实现以及MoveFileEx函数的文档。


18

请确保关闭Visual Studio和与该路径相关的任何Windows Explorer文件夹。


我没有打开需要重命名的目录中的任何文件,所以我认为一切都没问题。但是,VSCode仍在某种程度上使用它。关闭VSCode对我有用。 - Ders

0

除了执行以下操作,我无法解决这个问题

  1. 从文件夹名称更改之前的提交中分支出一个临时分支,以解决此问题。
  2. 按顺序挑选提交,解决文件夹名称大小写更改后再提交。
  3. 将旧分支重置为新的临时分支最终提交。
  4. 删除临时分支。

0

在将文件夹重命名为以下带有中间文件夹的名称后,请确保将更改添加到索引中。

git mv oldfolder newfolder

git add -u newfolder

git commit -m "changed the foldername whaddup"

参考资料


根据我的经验,git mv 已经包含了暂存的功能。这是在旧版本中吗?(2014年...) - xtofl

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