git中文件未区分大小写的原因以及如何解决

在Windows环境下,由于文件系统不区分大小写,导致Git在处理文件重命名时可能出现问题。Git默认配置为忽略大小写,这可能会在提交时创建两个看似相同的文件。通过修改`core.ignorecase`配置为`false`,可以使得Git区分大小写,但已有的提交历史中仍可能存在大小写不敏感的问题。解决方法是使用`git mv`命令进行重命名,以确保Git能正确检测到文件名的变化。

项目开发的时候给文件重命名是常见的操作。但如果仅仅是改变了大小写会怎样呢?

λ ls
README.txt

λ mv README.txt Readme.txt

λ git status
On branch master
nothing to commit, working tree clean

竟然完全不生效…

说到为什么会这样,不知道大家有没有注意到,windows文件系统是不区分文件大小写的。

比如当我要把如下一个文件命名为README.txt,因为已经存在了一个Readme.txt文件,所以这个操作是不被允许的。
在这里插入图片描述
所以windows下,git会在初始化仓库的时候自动配置.config来让git的的文件大小写规则与系统一致。初始化的情况包含git init 以及 git clone。以下我执行了git init 并查看默认配置:
在这里插入图片描述
没想到吧,Git默认已经把忽略大小写的这个选项ignorecase设置为了true,也就是不区分大小写。(这个单词的意思是:是否忽略大小写…设置为true,就是忽略的意思)

所以理论上,只要把他改回来就可以了。不妨试一下:

# 可以看到我已经设置为了false
λ git config -l | grep "case"
core.ignorecase=false

# 新建一个文件
git touch README.txt

# 添加并提交
git add .
git commit -m "init";

# 重命名
mv README.txt Readme.txt

# 可以看到已经检测到文件名发生改变了。
λ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        Readme.txt

nothing added to commit but untracked files present (use "git add" to track)

但是,如果你以为这就完了就太天真了。其实呢,这是噩梦的开始。因为你刚才的提交因为不区分大小写,会导致git上产生两个文件。

λ git ls-files
README.txt
Readme.txt

想一想也应该是这样,不区分大小写嘛,但在NTFS这种不区分大小写的系统中你让人如何pull代码?两个文件要合并么?

所以团队中最好还是不要开这个…那么这个咋整呢,其实也很简单,不妨继续回退到开始的状态,我们只是想解决给README.txt重命名为Readme.txt而已。

回到开始的状态:

λ git status
On branch master
nothing to commit, working tree clean

# 开始的状态,我只有一个README.txt文件
λ ls
README.txt

只要使用git mv的命令即可

λ git mv README.txt Readme.txt

C:\Users\Yanan\temp\temp7\temp7 (master)
λ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        renamed:    README.txt -> Readme.txt


是不是检测到了重命名 😃

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值