如何在 Git 中提交仅区分大小写的文件名更改?

我已经改变了一些文件名去首字母大写,如Name.jpgname.jpg 。 Git 无法识别此更改,因此我不得不删除文件并再次上传。检查文件名的更改时,Git 是否可以区分大小写?我尚未对文件本身进行任何更改。

答案

您可以使用git mv

git mv -f OldFileNameCase newfilenamecase

Git 有一个配置设置,告诉它是区分大小写还是不区分大小写: core.ignorecase 。要告诉 Git 区分大小写,只需将此设置设置为false

git config core.ignorecase false

文献资料

git config文档中

core.ignorecase

如果为 true,则此选项启用各种变通办法,以使 git 在不区分大小写的文件系统(例如 FAT)上更好地工作。例如,如果目录列表在 git 期望Makefile时找到了makefile ,则 git 将假定它确实是同一文件,并继续将其记住为Makefile

缺省值为 false,除非git-clone(1)git-init(1)将在创建存储库时探测并设置core.ignorecase true。

不区分大小写的文件系统

我所知道的两种最不区分大小写的文件系统是:

  • 视窗
  • OS X

使用 SourceTree,我能够从 UI 进行所有操作

  1. 重命名 FILE.extwhatever.ext
  2. 暂存该文件
  3. 现在, 重命名 whatever.extfile.ext
  4. 再次上演该文件

这有点乏味,但是如果您只需要对几个文件进行处理,那将会非常快

这是我在 OS X 上所做的:

git mv File file.tmp
git mv file.tmp file

两步,因为否则我收到 “文件存在” 错误。也许可以通过添加--cached等一步来完成。

暂时更改 Git 的大小写敏感性有时很有用:

方法 1 - 更改单个命令的区分大小写:

git -c core.ignorecase=true checkout mybranch可以关闭单个checkout命令的区分大小写。或更一般地说: git -c core.ignorecase= <<true or false>> <<command>>(感谢 VonC 在评论中建议这一点。)

方法 2 - 更改多个命令的区分大小写:

要将设置更改更长的时间(例如,如果需要先运行多个命令再将其更改回),请执行以下操作:

  1. git config core.ignorecase (这将返回当前设置,例如false )。
  2. git config core.ignorecase <<true or false>> - 设置所需的新设置。
  3. ... 运行其他多个命令...
  4. git config core.ignorecase <<false or true>> - 将配置值设置回其先前的设置。

在 OSX 下,为避免此问题并避免在不区分大小写的文件系统上进行开发时遇到其他问题,可以使用 “磁盘工具” 来创建区分大小写的虚拟驱动器 / 磁盘映像。

运行磁盘实用程序,创建新的磁盘映像,并使用以下设置(或根据需要进行更改,但区分大小写):

Mac Disk Utility屏幕截图

确保告诉 git 它现在位于区分大小写的 FS 上:

git config core.ignorecase false

我从其他答案中尝试了以下解决方案,但它们没有起作用:

如果您的存储库是远程托管的(GitHub,GitLab,BitBucket),则可以在原始位置重命名文件(GitHub.com),并以自上而下的方式强制重命名该文件。

以下说明与 GitHub 有关,但是它们背后的一般思想应适用于任何远程存储库托管平台。请记住,您尝试重命名的文件类型很重要,也就是说,它是 GitHub 在浏览器中认为是可编辑(代码,文本等)还是不可编辑(图像,二进制等)的文件类型。

  1. 访问 GitHub.com
  2. 导航到 GitHub.com 上的存储库,然后选择您正在使用的分支
  3. 使用网站的文件导航工具,导航到要重命名的文件
  4. GitHub 是否允许您在浏览器中编辑文件?
    • a。)可编辑
      1. 点击 “编辑此文件” 图标(看起来像铅笔)
      2. 在文件名文本输入中更改文件名
    • b。)无法编辑
      1. 在新标签页中打开 “下载” 按钮,然后将文件保存到计算机
      2. 重命名下载的文件
      3. 在 GitHub.com 上的上一个标签中,点击 “删除此文件” 图标(看起来像垃圾桶)
      4. 确保选中 “直接提交到分支branchname分支” 单选按钮,然后单击 “提交更改” 按钮
      5. 在 GitHub.com 上的同一目录中,单击 “上传文件” 按钮
      6. 从您的计算机上传重命名的文件
  5. 确保选中 “直接提交到分支branchname分支” 单选按钮,然后单击 “提交更改” 按钮
  6. 在本地,签出 / 提取 / 拉出分支
  7. 完成

1)将文件Name.jpg重命名为name1.jpg

2)提交删除的文件Name.jpg

3)文件重命名name1.jpgname.jpg

4)加入 ammend 文件name.jpg先前提交

git add
git commit --amend

类似于 @Sijmen 的答案,这是我在重命名目录时在 OSX 上起作用的方式( 灵感来自另一篇文章):

git mv CSS CSS2
git mv CSS2 css

简单地执行git mv CSS css给出无效的参数错误: fatal: renaming '/static/CSS' failed: Invalid argument可能是因为 OSX 的文件系统不区分大小写

ps BTW 如果您使用的是 Django,collectstatic 也无法识别大小写差异,因此您还必须在静态根目录中手动执行上述操作

我使用了以下步骤:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning untracked files"
git push origin master

对我来说是一个简单的解决方案