Git 默认是不区分大小写的

目录

背景

后续剧情

真相

是否可以设置core.ignorecase=false(禁止)

补充


背景

从远程拉取test到本地,再切换到test分支

git branch test --track origin/test

git checkout test

用git status查看test分支的工作状态时,出现未暂存提交的代码修改,如下图:

 好奇为啥会出现这种情况,查看idea项目和本地的目录文件内容,如下:

 有点懵,再查看最近同事提交的test分支代码,发现他在同个包下面push上了两个类AlipaySPIService.java 和 AlipaySpiService.java,看着两个类是可以通过大小写进行区分的。

 然后更离谱的是,git add .git checkout -- . 命令执行都没有效果,如下图:

后续剧情

同事将AlipaySPIService.java 类删除,push到远程test分支。

我这边重新克隆项目,进行拉取远程test分支代码,这样就恢复正常使用。

真相

不能就这样不清不楚地结束剧情,化身狄仁杰,根据现象进行抽丝剥茧,探索其真相。

看着跟文件名大小写有关系。

针对文件/文件夹,Windows 系统和 Mac 系统是不区分大小写的, Linux 系统是区分大小写的。

Git 默认是不区分大小写的,这种行为是由其 core.ignorecase 这个设置项控制的。而在 Windows 和 macOS 这两种不区分文件名大小写的系统上 core.ignorecase 的默认值为 true

Manka@DESKTOP-FVUJUND ~/upay

$ git config --list

core.ignorecase=true

所以,同事的办公环境是linux系统,因此不受影响。

我这边的办公环境是windows系统,代码上的提交用的是cgywin软件(是在Windows环境下,来模拟在UNIX/Linux环境下编程)

是否可以设置core.ignorecase=false(禁止)

情况1 :分支存在同目录下两个同名但字母大小写不一样的文件

先设置git config core.ignorecase false, 直接拉取 windows文件系统依旧显示只有小写的文件名。

git上线显示为小写文件名的文件,文件内容是小写文件名的文件,git status记录显示我们将大写的文件名改成小写的文件名,内容也修改成小写的文件名了,进行提交,gitlab系统上会存在同目录下两个同名但大小字母不一样的文件, 内容都是以小写文件名的内容。

情况2 :修改文件名大小写

假设windows系统里现在有一个文件为 testFile,将其重命名为 TESTFile,这个时候 Git 不会显示任何文件变化,因为 Git 默认忽略文件名大小写变化嘛。

好的,现在设置 Git core.ignorecase=false配置,如果将这个修改进行 commit 并且也 push 了,那么远程仓库现在就会同时有 testFile 和 TESTFile两个文件。

补充

之前也遇到过这种场景:

同事在linux环境将GateWay改成Gateway文件名,并推送到远端master分支。

我这边用windows环境的linux子系统(wsl是能区分文件大小写的)拉取master分支代码时,出现编译正常,但是idea一直显示报错,idea上显示文件名为GateWay, 但windows目前显示的文件为Gateway文件名。

后续解决办法:

执行Invalidate Caches/ Restart, idea重新加载项目,恢复正常。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值