在使用git提交代碼時(shí)候,有時(shí)候會(huì)遇到一個(gè)問(wèn)題凉驻,就是自己明明只修改了其中幾行腻要,提交上去以后發(fā)現(xiàn)整個(gè)文件都被修改了,在設(shè)置了格式風(fēng)格以后還會(huì)有提交不上去的情況沿侈,這個(gè)時(shí)候經(jīng)常讓人摸不到頭腦闯第,其實(shí)就是CRLF和LF在作怪
CRLF LF CR 都是什么意思:
CRLF: 是carriagereturnlinefeed的縮寫(xiě)。中文意思是回車(chē)換行缀拭。
LF: 是line feed的縮寫(xiě)咳短,中文意思是換行。
CR: 是carriagereturn的縮寫(xiě)蛛淋。中文意思是回車(chē)咙好。
簡(jiǎn)單的換行回車(chē)為什么會(huì)引出這么多的問(wèn)題呢,關(guān)鍵在于操作系統(tǒng)之間的分歧:
早期的mac系統(tǒng)使用CR當(dāng)做換行褐荷,現(xiàn)在也已經(jīng)統(tǒng)一成了LF
Unix(包含現(xiàn)在大量使用的linux)系統(tǒng)使用LF
windows系統(tǒng)使用LFCR當(dāng)做換行(自作聰明的兼容性勾效??)
也正是因?yàn)椴煌到y(tǒng)的分歧,在多人協(xié)作共同開(kāi)發(fā)的時(shí)候层宫,可能導(dǎo)致提交代碼時(shí)候產(chǎn)生問(wèn)題杨伙。
解決方法:
Android Studio內(nèi)部可以設(shè)置不同模式,具體位置在setting-->搜索code style見(jiàn)下圖:
其中有四個(gè)選項(xiàng)System-Dependent LF CR CRLF萌腿,默認(rèn)是System-Dependent限匣,也就是根據(jù)你是什么系統(tǒng)選擇什么類(lèi)型,如果想要自定義的話(huà)可以在這里設(shè)置毁菱,以后創(chuàng)建的新代碼也默認(rèn)用設(shè)置的方式
而如果想單獨(dú)修改某個(gè)文件的類(lèi)型米死,也可以在右下角進(jìn)行修改,見(jiàn)下圖:
跨平臺(tái)合作時(shí)候的解決方式:
當(dāng)我們使用git庫(kù)提交代碼的時(shí)候贮庞,有的人可能使用mac峦筒,有的人使用linux,有的人使用windows窗慎,不同的開(kāi)發(fā)環(huán)境如果都是按照自己系統(tǒng)的方式任意修改換行類(lèi)型物喷,難免會(huì)讓代碼庫(kù)整體混亂或者產(chǎn)生許多沒(méi)有必要的代碼更新
那么解決該問(wèn)題的方式有:core.autocrlf命令
git為了防止以上問(wèn)題擾亂跨平臺(tái)合作開(kāi)發(fā),使用命令可以轉(zhuǎn)化LF和CRLF
具體體現(xiàn)為:
- git config --global core.autocrlf true
Git可以在你push時(shí)自動(dòng)地把行結(jié)束符CRLF轉(zhuǎn)換成LF捉邢,而在pull代碼時(shí)把LF轉(zhuǎn)換成CRLF脯丝。用core.autocrlf來(lái)打開(kāi)此項(xiàng)功能,如果是在Windows系統(tǒng)上伏伐,把它設(shè)置成true,這樣當(dāng)簽出代碼時(shí)晕拆,LF會(huì)被轉(zhuǎn)換成CRLF
- git config --global core.autocrlf input
Linux或Mac系統(tǒng)使用LF作為行結(jié)束符藐翎;當(dāng)一個(gè)以CRLF為行結(jié)束符的文件不小心被引入時(shí)你肯定想進(jìn)行修正,把core.autocrlf設(shè)置成input來(lái)告訴 Git 在push時(shí)把CRLF轉(zhuǎn)換成LF实幕,pull時(shí)不轉(zhuǎn)換
- git config --global core.autocrlf false
在本地和代碼庫(kù)中都保留CRLF吝镣,無(wú)論pull還是push都不變,代碼庫(kù)什么樣昆庇,本地還是什么樣子
當(dāng)然在多人跨平臺(tái)工作時(shí)候末贾,最好還是約定使用LF,還是CRLF整吆,然后不同系統(tǒng)進(jìn)行對(duì)應(yīng)的設(shè)置拱撵,這樣是工作規(guī)范,也有利于提高工作效率表蝙,希望以上可以幫助大家拴测。