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

问题描述 投票:1023回答:14

我通过对第一个字母进行去大写来改变一些文件名,就像在Name.jpgname.jpg一样。 Git无法识别此更改,我不得不删除文件并再次上传。在检查文件名的变化时,Git是否有区分大小写的方法?我没有对文件本身进行任何更改。

git case-sensitive git-commit git-config
14个回答
1265
投票

你可以使用git mv

git mv -f OldFileNameCase newfilenamecase

4
投票

我使用了以下步骤:

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

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


4
投票

与@ Sijmen的答案类似,这是在重命名目录时在OSX上有用的东西(灵感来自另一篇文章的this答案):

git mv CSS CSS2
git mv CSS2 css

简单地做git mv CSS css给出了无效的参数错误:fatal: renaming '/static/CSS' failed: Invalid argument也许是因为OSX的文件系统是case insensitive

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


3
投票

我在MacOS上多次遇到过这个问题。 Git区分大小写,但Mac只保留大小写。

有人提交了一个文件:Foobar.java,几天后决定将其重命名为FooBar.java。当您提取最新代码时,它会失败并使用The following untracked working tree files would be overwritten by checkout...

我见过的唯一可靠的解决方法是:

  1. git rm Foobar.java
  2. 提交一条消息,你不能错过git commit -m 'TEMP COMMIT!!'
  3. 这会弹出一个冲突,迫使你合并冲突 - 因为你的更改删除了它,但另一个更改重命名(因此问题)它 接受您的更改,即“删除” git rebase --continue
  4. 现在放下你的解决方法git rebase -i HEAD~2drop TEMP COMMIT!!
  5. 确认该文件现在名为FooBar.java

2
投票

当你完成了大量的文件重命名,其中一些只是改变套管时,很难记住哪个是哪个。手动“git moving”文件可能相当有些工作。那么在我的文件名更改任务期间我会做的是:

  1. 将所有非git文件和文件夹删除到不同的文件夹/存储库。
  2. 提交当前空的git文件夹(这将显示为删除所有文件。)
  3. 将所有文件添加回原始git文件夹/存储库。
  4. 提交当前非空的git文件夹。

这将解决所有案例问题,而无需确定您重命名的文件或文件夹。


0
投票

如果没有任何效果,请使用git rm filename从磁盘中删除文件并将其添加回来。


843
投票

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

git config core.ignorecase false

Documentation

来自git config documentation

core.ignorecase

如果为true,则此选项启用各种变通方法,以使git能够更好地处理不区分大小写的文件系统,如FAT。例如,如果目录列表在git期望makefile时找到Makefile,git将假设它实际上是同一个文件,并继续记住它为Makefile

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

Case-insensitive file-systems

我知道的两个最流行的操作系统,它们具有不区分大小写的文件系统

  • 视窗
  • OS X.

110
投票

使用SourceTree我可以从UI完成所有这些操作

  1. FILE.ext重命名为whatever.ext
  2. 舞台那个文件
  3. 现在将whatever.ext重命名为file.ext
  4. 再次播放该文件

这有点单调乏味,但如果你只需要对几个文件进行操作就很快了


108
投票

这就是我在OS X上所做的:

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

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


42
投票

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

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

一定要告诉git它现在是一个区分大小写的FS:

git config core.ignorecase false

27
投票

暂时改变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>> - 将配置值设置回其先前的设置。

16
投票

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

2)提交删除文件Name.jpg

3)将文件name1.jpg重命名为name.jpg

4)修改添加文件name.jpg到上一次提交

git add
git commit --amend

14
投票

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

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

以下说明适用于GitHub,但其背后的一般概念应适用于任何远程存储库托管平台。请记住您尝试重命名的文件类型,即,它是否是GitHub认为可编辑的文件类型(代码,文本等)或浏览器中的不可编辑(图像,二进制等)。

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

5
投票

Mac OSX High Sierra 10.13在某种程度上解决了这个问题。只需为您的git项目创建一个虚拟APFS分区,默认情况下它没有大小限制并且不占用空间。

  1. 在“磁盘工具”中,选择“容器”磁盘时单击“+”按钮
  2. 在格式下选择APFS(区分大小写)
  3. 把它命名为Sensitive
  4. 利润
  5. 可选:在Sensitive中创建一个名为gitln -s /Volumes/Sensitive/git /Users/johndoe/git的文件夹

你的车将在/Volumes/Sensitive/

enter image description here

How do I commit case-sensitive only filename changes in Git?

© www.soinside.com 2019 - 2024. All rights reserved.