Git系列之再度踩坑文件名大小写问题 您所在的位置:网站首页 sourcetree提交代码报错 Git系列之再度踩坑文件名大小写问题

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

2023-04-07 19:49| 来源: 网络整理| 查看: 265

背景

某次代码提交后,测试扔过来一个构建失败的链接,整个页面上百行都是红的。大致扫了眼,都是一些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服务端存在两个文件,一个大写开头,一个小写开头。

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

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

怎么删?

最快速的方法,当时是直接在服务端删除,前提是需要有master权限;客户端提交?可客户端明明已经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 ..." to update what will be committed) (use "git restore ..." 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不可能识别不了更改) 解决方法:

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有