1. 程式人生 > >解決:git warning: LF will be replaced by CRLF in xxxx

解決:git warning: LF will be replaced by CRLF in xxxx

ngs end tle 方式 hello work net warning html

一. git add -A報錯

在利用git add -A添加文件時,意外的發現報錯了

技術分享圖片

報錯信息中:

  • LF:Line Feed 換行

  • CRLF:Carriage Return Line Feed 回車換行鍵

大意是:

警告:today.txt(我要添加的文件名)中LF被CRLF替換

在工作區裏,這個文件將會保持它原來的換行符

二. 什麽原因

1. 不同操作系統的行尾結束符(換行符)是不同的

  • windows下:CRLF("\r\n",使用回車換行兩個字符)

  • unix下:LF("\n",只使用換行)

  • mac下:CR("\r",只使用回車)

2. 使用Git Bash,相當於Linux環境

3. 我的文件也是通過touch today.txt和vim today.txt寫入的,這種情況下換行符是Linux下的LF

技術分享圖片

4. git工作區默認以CRLF來作為換行符,如果我們的文件中使用LF作為換行符,這時我們繼續git add或git commit就會彈出警告,當最終push到遠程倉庫的時候,git會統一轉化,最終以CRLF作為換行符

5. 如何理解 "The file will have its original line endings in your working directory."

簡單來說,設置 core.autocrlf=true 後,我們工作區的文件都應該用 CRLF 來換行。如果
改動文件時引入了 LF,或者設置 core.autocrlf 之前,工作區已經有 LF 換行符。提交改動時,git 會警告你哪些文件不是純 CRLF 文件,但 git 不會擅自修改工作區的那些文件,而是對暫存區(我們對工作區的改動)進行修改。也因此,當我們進行 git add 的操作時,只要 git 發現改動的內容裏有 LF 換行符,就還會出現這個警告

三. 解決方案

1. git中如何處理"換行"(line ending)

core.autocrlf是git中負責處理line ending的變量,可以設置三個值:true, false, input,默認是true

  • true:這意味著當你添加文件到git倉庫時,git都會視它為文本文件,將其換行符LF轉化為CRLF

  • false:當設置成false時,line endings將不做轉換操作。文本文件保持原來的樣子

  • input:設置為input時,添加文件git倉庫時,git把crlf編程lf。當有人Check代碼時還是lf方式。因此在window操作系統下,不要使用這個設置

2. 使用 git config --global core.autocrlf false 來解決

技術分享圖片

3. core.autocrlf設置為false的風險

多人協作開發時,如果 windows 上設置 core.autocrlf=false,倉庫裏也沒有配置 .gitattributes,很容易引入 CRLF 或者混合換行符(Mixed Line Endings,一個文件裏既有 LF 又有CRLF)到版本庫,這樣就可能產生各種奇怪的問題

如果有換行符不匹配本地平臺的情況,建議用 dos2unix 之類的工具轉換下換行符,因為很多配置文件是嚴格要求文件編碼和換行符的,謹慎一點比較好




參考文章

https://www.cnblogs.com/helloHKTK/p/7351946.html

https://blog.csdn.net/wowoniuzailushang/article/details/54317129

https://www.zhihu.com/question/50862500/answer/123197258

解決:git warning: LF will be replaced by CRLF in xxxx