解决 Git 默认不区分文件名大小写和同名文件共存的问题

Git使用了很久,今天在实际工作中遇到了一个小坑。第一次遇见,也困扰了很久,就是关于文件和文件夹的大小写命名的问题,记录一下希望能帮助到你。

问题描述

手中有一个维护了很久的项目,目录结构相当复杂,因为是多人同步开发,而且在项目启动前期并没有对文件命名进行严格规范,导致项目中文件和文件夹名五花八门。今天我对项目进行了重新梳理和规划,但是当我修改大小写时却遇到了问题:

原文件名: ABC.js

新文件名: abc.js

当我直接在项目中对文件进行大小写修改时,默认配置的git并不会检测到任何修改。对大小写并不敏感,虽然修改了文件名,但是无法进行任何提交操作。

通过一番搜索发现一个git的配置项,通过修改默认配置项,可以让git拥有大小写区分的能力。

在Git项目路径下执行该命令:

git config core.ignorecase false

当修改配置后,Git就对大小写敏感了,修改大小写能被识别了,这时我愉快的执行命令提交代码,却发现在远程仓库中同时存在两个文件ABC.js和abc.js。

这就有问题了,我们的初衷是修改文件名,而不是创建出另一个只是大小写有差异的相同文件。

我将本地仓库文件全部删除,重新从远程clone代码,结果发现依然是只有abc.js单独这一个文件:

我将这个abc.js删除,再次提交发现,git同时将abc.js和ABC.js两个文件同时删除了:

解决方案

git mv oldName newName

这种方式不能修改已经出现同名文件的时候

在使用svn的过程中也会遇到文件名大小写的问题,svn的仓库中对文件右键使用rename功能就能解决大小写的问题:

在git中同样可以使用类似的方式处理:

git mv abc.js ABC.js

git rm --cached -rfile/dir

当仓库中出现同名文件时,我们使用rm --cached命令对其进行删除:

git rm --cached ABC.js -r

(推荐)web上直接右键删除

很多人都不知道的功能,可以直接在web上访问仓库,使用右键进行删除:

在web上同时也会存在重名名的功能,操作起来更方便一些。

你可能感兴趣的:(解决 Git 默认不区分文件名大小写和同名文件共存的问题)