当前位置:   article > 正文

git中文件未区分大小写的原因以及如何解决_本地文件首字母大写,在git上为啥是小写

本地文件首字母大写,在git上为啥是小写

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

λ ls
README.txt

λ mv README.txt Readme.txt

λ git status
On branch master
nothing to commit, working tree clean
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

竟然完全不生效…

说到为什么会这样,不知道大家有没有注意到,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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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

λ git ls-files
README.txt
Readme.txt
  • 1
  • 2
  • 3

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

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

回到开始的状态:

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

# 开始的状态,我只有一个README.txt文件
λ ls
README.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

只要使用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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

是不是检测到了重命名 本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/678889

推荐阅读
相关标签