多读书多实践,勤思考善领悟

git大小写问题的解决办法

本文于1887天之前发表,文中内容可能已经过时。

问题复现:

新建一个 a.js 文件(大小写不敏感的状态下),并提交
修改本地 a.js 变为 A.js,文件内容无变更,无法提交
执行git config core.ignorecase false,修改 大小写敏感 规则,然后提交,查看结果,此时会存在 大小写 同时存在的文件
此时某种机缘下,再次执行 git config core.ignorecase true,大小写不敏感,
此时执行 git push , 即把最新的更新都更新到了 a.js 中
此时再修改 大小写敏感规则为敏感, 执行 git pull ,并不会拿到最新的更新。比如自己想要的是第一次修改后的 A.js ,但是服务器有一个没有更新的 A.js 和 有更新的 a.js,而你只能拿到前者,所以就会遇到各种各样的坑……

解决办法:

执行git config –global core.ignorecase false,全局设置 大小写敏感 。

1. 文件变更比较少的情况

直接使用以下命令重命名文件,在 git 中不要直接修改文件名,最好的办法是使用下面的方式,

1
2
3
4
5
6
7
git mv -f [你想要删掉的文件] [你想要留下的文件]
git mv -f a.js A.js

等同于:

git rm a.js
git add A.js

这个命令的目的就是删除不需要的大小写同名文件,修改后 git push 提交变更即可。

tips:

因为 git 默认大小写不敏感,所以最好添加项目配置文件,设置 大小写敏感。

1
2
touch .gitconfig
git config core.ignorecase false

2. 变更比较多,并且拥有分支较高权限

  • 在 github 删除该分支
  • 本地执行 git rm -r –cached . (注意后面‘点号’)
  • 然后重新 git push,就ok了
  • 此法不太好,有点暴力,容易出问题,但适用于 变更发生于近期的情况。

总结:

其实看解决办法的话,只是一个很小的问题,但是出现的 bug 确实是让人很头疼的,因为 mac windows 在不设置大小写敏感规则的时候默认大小写是不敏感,项目部署的机器是 Linux 的,而 Linux 是大小写敏感的。所以这样的问题平时不易发现,本地调试的时候大部分时候并不会出错误,只有在项目部署的时候问题才会显示出来。