在使用git提交代碼時候,有時候會遇到一個問題,就是自己明明只修改了其中幾行,提交上去以后發現整個文件都被修改了,在設置了格式風格以后還會有提交不上去的情況,這個時候經常讓人摸不到頭腦,其實就是CRLF和LF在作怪
CRLF LF CR 都是什么意思:
CRLF: 是carriagereturnlinefeed的縮寫。中文意思是回車換行。
LF: 是line feed的縮寫,中文意思是換行。
CR: 是carriagereturn的縮寫。中文意思是回車。
簡單的換行回車為什么會引出這么多的問題呢,關鍵在于操作系統之間的分歧:
早期的mac系統使用CR當做換行,現在也已經統一成了LF
Unix(包含現在大量使用的linux)系統使用LF
windows系統使用LFCR當做換行(自作聰明的兼容性??)
也正是因為不同系統的分歧,在多人協作共同開發的時候,可能導致提交代碼時候產生問題。
解決方法:
Android Studio內部可以設置不同模式,具體位置在setting-->搜索code style見下圖:
其中有四個選項System-Dependent LF CR CRLF,默認是System-Dependent,也就是根據你是什么系統選擇什么類型,如果想要自定義的話可以在這里設置,以后創建的新代碼也默認用設置的方式
而如果想單獨修改某個文件的類型,也可以在右下角進行修改,見下圖:
跨平臺合作時候的解決方式:
當我們使用git庫提交代碼的時候,有的人可能使用mac,有的人使用linux,有的人使用windows,不同的開發環境如果都是按照自己系統的方式任意修改換行類型,難免會讓代碼庫整體混亂或者產生許多沒有必要的代碼更新
那么解決該問題的方式有:core.autocrlf命令
git為了防止以上問題擾亂跨平臺合作開發,使用命令可以轉化LF和CRLF
具體體現為:
- git config --global core.autocrlf true
Git可以在你push時自動地把行結束符CRLF轉換成LF,而在pull代碼時把LF轉換成CRLF。用core.autocrlf來打開此項功能,如果是在Windows系統上,把它設置成true,這樣當簽出代碼時,LF會被轉換成CRLF
- git config --global core.autocrlf input
Linux或Mac系統使用LF作為行結束符;當一個以CRLF為行結束符的文件不小心被引入時你肯定想進行修正,把core.autocrlf設置成input來告訴 Git 在push時把CRLF轉換成LF,pull時不轉換
- git config --global core.autocrlf false
在本地和代碼庫中都保留CRLF,無論pull還是push都不變,代碼庫什么樣,本地還是什么樣子
當然在多人跨平臺工作時候,最好還是約定使用LF,還是CRLF,然后不同系統進行對應的設置,這樣是工作規范,也有利于提高工作效率,希望以上可以幫助大家。