背景
如果你使用 git 做项目管理,你可能会遇到一个非常棘手的问题:git 默认是不区分文件名大小写的。
这意味着如果你修改了文件名的大小写,git 会认为文件没有变化,从而导致本地和远程仓库不一致,甚至出现运行错误。
Git 对 文件名字母大小写
不敏感,会忽略文件名字母大小写的变化,导致版本管理异常。
那么,你是如何发现和解决这个问题呢?有没有什么好的方法可以让我们在使用 git 时避免这个问题呢?
本文将为大家介绍一个实用的技巧:配置 git 让它能够识别文件名大小写。
这种技巧可以让我们在修改文件名大小写时,git 能够正确地跟踪文件变化,并及时地同步到远程仓库,这样就可以避免因为文件名大小写不一致而导致的各种问题。
接下来,我们将通过一个实例来深入了解这个实用的技巧。
演示
对文件重命名后,如果只改了字母大小写,默认情况,Git 会认为没有变化,不会加入版本控制中。
首先我们来看一个项目,这个项目有一个文件夹 Components 文件夹中有一个 avatar.vue
和 Upload.vue
文件。
我们使用 git init 对项目进行初始化。
然后提交到本地仓库。
后来呢,我们发现文件文件夹与文件的名字并不是很合适,想给它改一改名字。
然后将文件夹 Components
与文件 Upload.vue
的首字母都改成了小写。
改成小写之后你会发现一个神奇的现象:git 对这个改动没有跟踪记录。
g这是因为 git 默认情况下是不区分大小写的,你更改了以后它还认为是大写的,它只关心文件内容是否变化,而不关心文件名是否变化。这就会造成一系列不可预知的问题。
比如,我们之前使用的是大写,提交到了远程的 git 仓库,那么仓库记录的就是大写字母的文件。
而将来有一天我们把本地的大写改成小写之后就没有跟踪记录了,它就没有办法同步到远程,远程那边仍然是大写的,本地是小写字符。
于是在做本地开发的时候,会按照小写字母的文件来进行开发,而一部署到服务器,服务器那边还是大写字母的文件,你说出不出问题?
这种问题还不好排查,运气不好一上午都查不到问题在哪,本地好好的远程就出问题了。
解决方案
- 查看 Git 配置
切替到工程所在目录,执行
git config core.ignorecase
Git 的默认配置,是忽略文件名大小写的。下面是配置查询结果:
- 设置 Git 仓库对文件名大小写敏感,不再忽略大小写。
git config core.ignorecase false
这是对 git 的一个配置,默认是忽略大小写的,我们将它配置为 false
它就不在忽略了。
我们再看是不是就有跟踪记录了?那么这个时候再次提交,把新的记录上传到服务器上就没问题了。
或者直接改git隐藏目录下的config文件也可以。
特别注意
这种配置是仓库级别
的,不支持全局配置。因此,每一个仓库克隆到本地后,都需要配置一遍。