git config --get core.ignorecase # 查看大小写是否敏感
问题描述:
如果分支上直接在编辑器或资源管理器上修改项目中的文件名(只变更大小写),本地虽然可以调试通过,
但是 git 并不会识别和记录这个修改,所以下一次提交推送时并不会带上这个重命名修改,远程仓库中这个文件名还是保持不变;
因此,如果检出其他分支或者其他协作者拉取代码,项目就会报错
-
因为一个本地文件的名称如果从小写变成大写,使用这个文件的代码也改成了大写;
推送到远程后,远程的这个文件依然是小写,但远程上使用该文件的代码中成功改成了大写;
所以,启动项目就会提示文件不存在
方法一:规范重命名
先把文件夹命名成其他名称,然后再命名为大写就行了
git mv test-dir tmp
git mv tmp TEST-DIR
------------
# rename test.txt --> tmp
git add .
git commit -m "..."
# rename tmp --> TEST.TXT
git add .
git commit -m "..."
git push
方法二:修改大小写配置(不推荐)
修改 git 配置为不忽略大小写:git config core.ignorecase false
然后直接在资源管理器或编辑器中修改文件名大小写,git 就会识别到了,而且是被识别为 untracked 类型的变更,这依然是 Windows 下对文件名大小写不敏感导致的
如果直接推送到远程的话,那么远程仓库就会同时存在大小写两个版本的文件(github/gitlab 服务器通常都是 Linux 系统),为后期维护添加隐患,本地在分支间切换时也可能出现以下报错:
error: The following untracked working tree files would be overwritten by checkout:
test.txt
Please move or remove them before you switch branches.
Aborting
这种情况下依然需要使用方法一来解决