Git系列之再度踩坑文件名大小写问题

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 Git系列之再度踩坑文件名大小写问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

背景

某次代码提交后,测试扔过来一个构建失败的链接,整个页面上百行都是红的。大致扫了眼,都是一些cannot find symbol的报错,而且都是在POJO类上面,而这些类本地代码看下来没有任何毛病。在POJO的定义上有使用lombok,但是这不是第一次构建,显然与lombok无关:
在这里插入图片描述
遂,让测试重新构建。

谁知道,过了一会儿,依旧构建失败。此时才观察到导致构建失败的真正报错原因(上图):
error class GetAdsetDataJob is public, shoule be declared in a file named GetAdsetDataJob.java

遗留问题:为什么Jenkins构建失败,会打印出一大堆(上百行不夸张)乱七八糟(跟根本问题毫无瓜葛)的报错日志,干扰视听呢???

看到上面这个报错,确实是刚提交的调整文件大小写,排查有了方向。

但是我本地确确实实启动正常,git push也是成功的。为啥Jenkins构建失败?

又是一番丈二和尚摸不着头脑。抱着试一试的心态,打开GitLab server,浏览服务器文件目录:
在这里插入图片描述
还真一不小心发现问题(其实没有那么容易):GitLab服务端存在两个文件,一个大写开头,一个小写开头。

遗留问题:如上图,分明有改过三个文件的大小写,可是为啥只有一个文件导致后续的各种麻烦???印象中,三次提交没区别啊

解决方法就很简单:删除小写开头的。

怎么删?

  1. 最快速的方法,当时是直接在服务端删除,前提是需要有master权限;
  2. 客户端提交?可客户端明明已经push成功过的

鉴于我恰好有master权限,选择第一种。

以为万事大吉。大错特错。

后续工作中,无论是切换分支,还是拉取远端更新,都还是有报错。

切换分支:

git checkout dev_wj

error: The following untracked working tree files would be overwritten by checkout:
        octopus-backend/src/main/java/com/aaa/cbd/platform/job/facebook/getAccountDataJob.java
        .....省略更多
Please move or remove them before you switch branches.
Aborting

解决方法,强制切换分支:git checkout -f dev_wj

更新分支:

git pull origin dev_wj或直接git pull,也是报如上类似错误;尝试加上-f强制拉取参数:

awesome-me@PPC-0202000118 MINGW64 /d/code/cbd-platform/octopus-backend (dev_wj)
$ git pull -f
error: The following untracked working tree files would be overwritten by merge:
        octopus-backend/src/main/java/com/aaa/cbd/platform/service/material/UploadMaterialToChannelServiceImpl.java
Please move or remove them before you merge.
Aborting

本地有一个小写文件:uploadMaterialToChannelServiceImpl.java
只能先删除本地小写文件,然后执行git pull命令:

Removing octopus-backend/src/main/java/com/ppdai/cbd/platform/service/material/uploadMaterialToChannelServiceImpl.java
Merge made by the 'recursive' strategy.
省略。。。

拉取更新成功。

git status .

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    octopus-backend/src/main/java/com/aaa/cbd/platform/service/material/UploadMaterialToChannelServiceImpl.java

显示我本地没有大写开头文件,我删除的明明是小写的!!
没办法,执行git restore .撤销本地修改。

脸上笑嘻嘻,心里妈卖批。项目组里面有这种同事,真的是浪费生命。。

网上近乎千篇一律的抄来抄去的垃圾解决方案,根本不懂Git:
git config core.ignorecase false
本地代码运行ok,但是发现push上去的代码运行后报错,发现有个文件没注意大小写,于是重命名了该文件,发现git没有识别这个更改,不能提交。(备注:无稽之谈:git server是Linux服务器,大小写敏感的,git不可能识别不了更改)
解决方法:

  1. 查看git 的设置:git config --get core.ignorecase
    发现默认是不区分大小的,因此当你修改文件名的大小写后,git并不会认为你有修改
  2. 更改设置:git config core.ignorecase false

参考

Git 仓库中文件名大小写问题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142178.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!