昨天胖子在群里問了個
git add
將代碼從工作區加入暫存區時出現CRLF和LF轉換的問題,正好一年前我剛玩linux時候研究過一陣子這個問題,今天早上使用tcg/voyager時候也出現了這個問題,這里我就稍微說一下問題出現的原因以及處理的辦法。
如果您在Windows上進行編程,但你的合作團隊有人在MacOS或者Linux上編程,你可能遇到這篇文章的說明問題。這是因為Windows在其文件中使用換行符和換行字符,而Mac和Linux系統只使用換行字符。這是跨平臺工作令人難以置信的煩人事實; Windows上的許多編輯器用CRLF替換現有的LF行的結尾,或者當用戶點擊Enter鍵時插入兩個行結束字符
首先我們必須知道現在電腦系統有windows,unix兩大系列,unix下有很多變體稱為
類Unix系統
,主要有MacOS,Linux,Hp-ux,Ibm-aix,Solaris等等。這其中由于Linux是開源集大成者,在它的體系中又衍生了以Fodora和Debian的兩大陣營。類unix系統大多數時候是使用兼容的,但是windows和類unix系統之間無論是操作還是設計理念都不一樣。這次要提到的問題,起源就在上面這段話中。類unix系統中,回車就是回車(carriage return),換行就是換行(line feed),它們綁定13和10兩個ASCII碼值,回車和換行分別簡稱CR和LF。編輯代碼的時候,Windows系統里面,每行結尾是"<回車><換行>",即"\r\n";類Unix系統里,每行結尾是"<回車>"。
這樣會導致什么后果?Unix/Mac系統下的文件在Windows里打開的話,所有文字會變成一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號。
-
那么胖子的
git add
操作中為什么會提示LF將會被替換為CRLF呢?主要可能有下面幾個原因?- 團隊開發,每個人實用的操作系統平臺不同。
- 胖子使用了雙系統,開發時候切換系統進行編碼。
- 沒有設置PhpStorm和Atom等常用IDE均有的LF綁定功能。
解決辦法呢?主要看你從git角度去解決還是文件角度去思考。如果你想把文件本身進行轉換,請使用
IDE的LF-CR綁定設置
或者.editorconfig
文件轉換,如果你從代碼提交暫存區或者倉庫來考慮,那么Git有幾個配置選項來幫助解決這些問題,你應該看看下面的幾行代碼:
git config core.autocrlf true
git config core.autocrlf input
git config core.autocrlf false
core.autocrlf這個設置應該在Windows檢查中留下CRLF結尾,但是在Mac和Linux系統以及存儲庫中的LF結束。
第一行:當你將文件添加到暫存區時,Git可以通過設置core.autocrlf將CRLF行結尾自動轉換為LF來處理這類問題。如果您在Windows機器上,將其設置為true,那么當您pull代碼時,將LF結尾轉換為CRLF。
第二行:如果您使用的是Linux或Mac系統,那么當您pull文件時,您不希望Git自動轉換它們; 然而,如果你的Windows豬隊友把未經處理帶CRLF格式的文件push到遠程代碼庫,那么你可能希望Git來自動解決這個問題。可以通過將core.autocrlf設置為input來告知Git將CRLF轉換為LF。
第三行:如果你是Windows程序員,只執行一個Windows項目或者所團隊都是用windows系統甚至服務器都用windows,那么您可以關閉此功能,通過將配置值設置為false,將回車記錄在存儲庫中。
-
參考地址: