背景
某次代碼提交后,測驗扔過來一個構建失敗的鏈接,整個頁面上百行都是紅的,大致掃了眼,都是一些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 <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不可能識別不了更改)
解決方法:
- 查看git 的設定:
git config --get core.ignorecase
發現默認是不區分大小的,因此當你修改檔案名的大小寫后,git并不會認為你有修改 - 更改設定:
git config core.ignorecase false
參考
Git 倉庫中檔案名大小寫問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298465.html
標籤:其他
