主題:git add處理不同系統(tǒng)的CRLF問題
將代碼從工作區(qū)加入暫存區(qū)時(shí)出現(xiàn)CRLF和LF轉(zhuǎn)換的問題,正好一年前我剛玩linux時(shí)候研究過一陣子這個(gè)問題虏束,今天早上使用tcg/voyager時(shí)候也出現(xiàn)了這個(gè)問題棉饶,這里我就稍微說一下問題出現(xiàn)的原因以及處理的辦法。
如果您在Windows上進(jìn)行編程镇匀,但你的合作團(tuán)隊(duì)有人在MacOS或者Linux上編程,你可能遇到這篇文章的說明問題袜啃。這是因?yàn)閃indows在其文件中使用換行符和換行字符汗侵,而Mac和Linux系統(tǒng)只使用換行字符。這是跨平臺工作令人難以置信的煩人事實(shí); Windows上的許多編輯器用CRLF替換現(xiàn)有的LF行的結(jié)尾群发,或者當(dāng)用戶點(diǎn)擊Enter鍵時(shí)插入兩個(gè)行結(jié)束字符
首先我們必須知道現(xiàn)在電腦系統(tǒng)有windows晰韵,unix兩大系列,unix下有很多變體稱為類Unix系統(tǒng)
熟妓,主要有MacOS雪猪,Linux,Hp-ux起愈,Ibm-aix只恨,Solaris等等译仗。這其中由于Linux是開源集大成者,在它的體系中又衍生了以Fodora和Debian的兩大陣營官觅。類unix系統(tǒng)大多數(shù)時(shí)候是使用兼容的纵菌,但是windows和類unix系統(tǒng)之間無論是操作還是設(shè)計(jì)理念都不一樣。這次要提到的問題休涤,起源就在上面這段話中咱圆。類unix系統(tǒng)中,回車就是回車(carriage return)功氨,換行就是換行(line feed)序苏,它們綁定13和10兩個(gè)ASCII碼值,回車和換行分別簡稱CR和LF捷凄。編輯代碼的時(shí)候忱详,Windows系統(tǒng)里面,每行結(jié)尾是"<回車><換行>"纵势,即"\r\n"踱阿;類Unix系統(tǒng)里,每行結(jié)尾是"<回車>"钦铁。
這樣會(huì)導(dǎo)致什么后果软舌?Unix/Mac系統(tǒng)下的文件在Windows里打開的話,所有文字會(huì)變成一行牛曹;而Windows里的文件在Unix/Mac下打開的話佛点,在每行的結(jié)尾可能會(huì)多出一個(gè)^M符號。
-
那么git add
操作中為什么會(huì)提示LF將會(huì)被替換為CRLF呢黎比?主要可能有下面幾個(gè)原因超营?- 團(tuán)隊(duì)開發(fā),每個(gè)人實(shí)用的操作系統(tǒng)平臺不同阅虫。
- 使用了雙系統(tǒng)演闭,開發(fā)時(shí)候切換系統(tǒng)進(jìn)行編碼。
- 沒有設(shè)置PhpStorm和Atom等常用IDE均有的LF綁定功能颓帝。
解決辦法呢米碰?主要看你從git角度去解決還是文件角度去思考。如果你想把文件本身進(jìn)行轉(zhuǎn)換购城,請使用IDE的LF-CR綁定設(shè)置
或者.editorconfig
文件轉(zhuǎn)換吕座,如果你從代碼提交暫存區(qū)或者倉庫來考慮,那么Git有幾個(gè)配置選項(xiàng)來幫助解決這些問題瘪板,你應(yīng)該看看下面的幾行代碼:
git config core.autocrlf true
git config core.autocrlf input
git config core.autocrlf false
core.autocrlf這個(gè)設(shè)置應(yīng)該在Windows檢查中留下CRLF結(jié)尾吴趴,但是在Mac和Linux系統(tǒng)以及存儲庫中的LF結(jié)束。
第一行:當(dāng)你將文件添加到暫存區(qū)時(shí)侮攀,Git可以通過設(shè)置core.autocrlf將CRLF行結(jié)尾自動(dòng)轉(zhuǎn)換為LF來處理這類問題锣枝。如果您在Windows機(jī)器上厢拭,將其設(shè)置為true,那么當(dāng)您pull代碼時(shí)惊橱,將LF結(jié)尾轉(zhuǎn)換為CRLF蚪腐。
第二行:如果您使用的是Linux或Mac系統(tǒng),那么當(dāng)您pull文件時(shí)税朴,您不希望Git自動(dòng)轉(zhuǎn)換它們; 然而回季,如果你的Windows隊(duì)友把未經(jīng)處理帶CRLF格式的文件push到遠(yuǎn)程代碼庫,那么你可能希望Git來自動(dòng)解決這個(gè)問題正林∨菀唬可以通過將core.autocrlf設(shè)置為input來告知Git將CRLF轉(zhuǎn)換為LF。
第三行:如果你是Windows程序員觅廓,只執(zhí)行一個(gè)Windows項(xiàng)目或者所團(tuán)隊(duì)都是用windows系統(tǒng)甚至服務(wù)器都用windows鼻忠,那么您可以關(guān)閉此功能,通過將配置值設(shè)置為false杈绸,將回車記錄在存儲庫中醉拓。
參考地址: