IDEA和GIT關于文件中LF和CRLF問題及解決
問題描述
項目軟件安裝shell腳本上git倉庫管理,但拉取后,上linux運行報錯。

問題思考
根據(jù)描述信息可以查看到\r字樣,初步判別為換行符導致
1、將腳本文件移動至notepad++中,通過視圖—>顯示符號—>顯示所有符號,一頓操作后,可以看到腳本中一串CRLF的符號

相關名詞解釋:
CR:Carriage Return,對應ASCII中轉義字符\r chr(13),表示回車LF:Linefeed,對應ASCII中轉義字符\n chr(10),表示換行CRLF:Carriage Return & Linefeed,\r\n,表示回車并換行
進而了解到普遍使用的編輯器IDEA因為默認是windows使用場景,所以換行符的默認設置為CRLF;但Shell腳本是在Linux下運行,則需要被替換為LF
在IDEA右下角,除了編碼格式以外,還有個Line Separator

廢話不多說,為了解決問題,就立馬著手將所有的Shell腳本改成了LF
1、一勞永逸,杜絕后續(xù)類似問題的出現(xiàn),可將IDEA的默認配置修改為了LF

*最后的選項,大致是允許IDEA的配置覆蓋重寫代碼的樣式設置;可視自身情況選擇或取消,與本文影響不大
2、興致沖沖,將修改后的代碼提交后,讓測試同事重新驗證,emmm對面拉取的還是CRLF。尷尬要犯了
- 首先懷疑是git未能識別到CRLF和LF這類修改
- 嘗試將文件刪除后commit & push再新增LF格式文件后 commit & push失?。。?!
- 在搜了Git LF和CRLF問題后,發(fā)現(xiàn)此事兒有點貓膩
git的默認設置中有一個字段:core.autocrlf ,作用就是:
在push的時候會把CRLF轉換成LF;pull的時候則會把LF轉換成CRLF
原本Git這個自動轉換的配置是在做好事兒,但是卻坑苦了不懂它的人… …
OK?。?!明白了原理,那么解決思路就來了
解決過程
以下命令在Git Bash中執(zhí)行即可
- 場景一、代碼在window提交,在windows使用(即默認場景)
$ git config --global core.autocrlf true
- 場景二、代碼在windows提交,在Linux或者Mac系統(tǒng)或者Jenkins上專門打包為服務器使用,無需Git在pull時進行自動轉換;(即Git在push時把CRLF轉換成LF,pull時不轉換)
$ git config --global core.autocrlf input
- 場景三、不想要Git自動轉換:
$ git config --global core.autocrlf false
綜上:
1、編輯器本身的換行符問題
2、Git在提交和拉取過程的自動轉換問題
問題解決?。。?/p>
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
java根據(jù)擴展名獲取系統(tǒng)圖標和文件圖標示例
這篇文章主要介紹了java根據(jù)擴展名獲取系統(tǒng)圖標和文件圖標示例,需要的朋友可以參考下2014-03-03
mybatis?<foreach>標簽動態(tài)增刪改查方式
這篇文章主要介紹了mybatis?<foreach>標簽動態(tài)增刪改查方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

