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

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

我把一些文件的名字改成了首字母不大写,如在Name.jpg中改为Name.jpg。Git无法识别这些更改,我必须删除这些文件并重新上载。在检查文件名的更改时,Git是否有区分大小写的方法?我没有对文件本身做任何更改。


您可以使用git mv:

1
git mv -f OldFileNameCase newfilenamecase


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

1
git config core.ignorecase false

文档

git config文件中:

core.ignorecase

If true, this option enables various workarounds to enable git to work better on filesystems that are not case sensitive, like FAT. For example, if a directory listing finds makefile when git expects Makefile, git will assume it is really the same file, and continue to remember it as Makefile.

The default is false, except git-clone(1) or git-init(1) will probe and set core.ignorecase true if appropriate when the repository is created.

不区分大小写的文件系统

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

  • 窗户
  • 操作系统X


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

1
2
git mv File file.tmp
git mv file.tmp file

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


使用sourcetree,我可以从用户界面完成这一切

  • FILE.ext重命名为whatever.ext
  • 阶段文件
  • 现在将whatever.ext重命名为FILE.ext
  • 重新准备那个文件

这有点乏味,但如果你只需要对几个文件进行处理,那就很快了。


在OSX下,为了避免这个问题并避免在不区分大小写的文件系统上开发其他问题,可以使用磁盘实用程序创建区分大小写的虚拟驱动器/磁盘映像。

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

Mac Disk Utility Screenshot

一定要告诉Git它现在在区分大小写的fs上:

1
git config core.ignorecase false


有时可以临时更改Git的大小写敏感度。两种可能的方法:

方法1(非常临时):

git -c core.ignorecase=true checkout mybranch关闭单个checkout命令的区分大小写。或者更一般地说:git -c core.ignorecase=<><>。(感谢VONC在评论中提出这一点。)

方法2(半永久性):

要将设置更改更长时间(例如,如果在将其更改回之前需要运行多个命令):

  • git config core.ignorecase(返回当前设置,如false)。
  • git config core.ignorecase<>设置所需的新设置。
  • …运行多个其他命令…
  • git config core.ignorecase<>—将配置值设置回原来的设置。

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

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

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

    4)Ammond在以前的承诺中增加了文件Name.jpg

    1
    2
    git add
    git commit --amend


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

    • git mv filename
    • git rm -f filename

    如果您的存储库像mine一样托管在github上,则可以在origin(github.com)上重命名该文件,并以自上而下的方式强制重命名该文件。

    下面的说明取决于您试图重命名的文件类型,也就是说,它是Github认为在浏览器中可编辑(代码、文本等)还是不可编辑(图像、二进制等)的文件类型。

  • 访问github.com
  • 在github.com上导航到您的存储库并选择您正在使用的分支
  • 使用网站的文件导航工具,导航到要重命名的文件
  • GitHub允许您在浏览器中编辑文件吗?
    • 可编辑的
    • 单击"编辑此文件"图标(看起来像铅笔)
    • 更改文件名文本输入中的文件名
    • b)不可编辑
    • 在新选项卡中打开"下载"按钮并将文件保存到计算机
    • 重命名下载的文件
    • 在github.com上的上一个选项卡中,单击"删除此文件"图标(看起来像垃圾桶)
    • 确保选中"直接提交到branchname分支"单选按钮,然后单击"提交更改"按钮。
    • 在github.com上的同一目录中,单击"上载文件"按钮。
    • 从计算机上载重命名的文件
  • 确保选中"直接提交到branchname分支"单选按钮,然后单击"提交更改"按钮。
  • 在本地,签出/获取/拉动分支
  • 多恩

  • MacOSXhighSierra10.13稍微修正了这个问题。只需为Git项目创建一个虚拟的APFS分区,默认情况下,它没有大小限制,也不占用任何空间。

  • 在磁盘实用程序中,选择容器磁盘时单击+按钮。
  • 在"格式"下选择APF(区分大小写)
  • 命名为Sensitive
  • 利润
  • 可选:在名为gitln -s /Volumes/Sensitive/git /Users/johndoe/git的敏感文件夹中创建一个文件夹。
  • 您的驱动器将在/Volumes/Sensitive/

    enter image description here

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


    我使用以下步骤:

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

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


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

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

    唯一可靠的解决方法是:

  • git rm Foobar.java
  • 承诺一条你不能错过git commit -m 'TEMP COMMIT!!'的信息
  • 这将弹出一个冲突,迫使您合并冲突-因为您的更改将其删除,但另一个更改将其重命名(因此出现问题)
  • 接受您的更改,即"删除"
  • git rebase --continue
  • 现在,放弃你的解决方法:git rebase -i HEAD~2dropTEMP COMMIT!!
  • 确认该文件现在称为Foobar.java

  • 当您对文件进行了大量重命名,其中一些只是更改了大小写时,很难记住哪个是哪个。手动"git moving"这个文件可以做很多工作。因此,在文件名更改任务中我要做的是:

  • 将所有非Git文件和文件夹删除到其他文件夹/存储库中。
  • 提交当前空的git文件夹(这将显示为删除的所有文件)。
  • 将所有文件添加回原始git文件夹/存储库。
  • 提交当前非空Git文件夹。
  • 这样可以解决所有的案例问题,而不必试图找出您重命名的文件或文件夹。


    如果不起作用,请使用git rm文件名从磁盘中删除文件并将其添加回去。