1. 程式人生 > >開發的二三事:CRLF 和 LF

開發的二三事:CRLF 和 LF

最近使用VS開啟某些程式碼檔案的時候,突然發現有這麼一個提示:
這裡寫圖片描述

趕緊去查git的log日誌。檢查log時,發現很多提交的程式碼,兩個檔案之間,貌似沒有任何的改動。但仔細一看,原來區別是每一行末尾的換行符。有些換行符是下箭頭↓,有些換行符是鍵盤上回車鍵的那個符號,先向下,再向左的箭頭。如下圖所示:

這裡寫圖片描述

上網一搜,原來不同作業系統的換行符是不一樣的啊。 unix是b’\n’, windows是b’\r\n”,mac是b’\r’。真是一個作業系統一個模樣,內部的儲存byte不一樣,從外部的編輯器還看不出來。unix 的 \n 就是 LF(Line Feed)型別了。windows是cr(Carriage Return)。現在知道區別了,在專案裡只需要統一標準就行了。粗略一想:專案是c#開發,目前還是在windows平臺,當然是使用CRLF了。 但是,如何對每一個成員提交的程式碼,都稽核一下,使用\r\n的換行符提交呢?

還好,對於這個問題,GIT已經有標準的解決辦法。通過git的設定,可以自動完成上面的操作。
設定如下即可:

git config --global core.autocrlf true
git config --global core.safecrlf true

上面第一行的意思是,如果有CRLF的換行符,在提交git時會自動轉換成LF,但是在檢出程式碼的時候會轉換為CRLF。這樣,VS就不會彈出提示了。
上面第二行的意思是,不允許提交包含混合換行符的檔案。

也許有的同學就要問了。我按照CRLF提交,CRLF檢出,不是更好麼?但是畢竟上面的是一個global的設定,誰能保證組裡面每一個人都在windows上開發,不做其他專案,誰能保證專案永遠只在windows上執行呢?

後續的處理就很簡單了。把我們專案中所有檔案的換行都轉為CRLF,提交到git中即可。從網上找了個指令碼,修改了下,效果還不錯,能夠在三個系統標準之間相互轉換,支援字尾名過濾。我放到gist上了,有需要的下載來看看:gist 地址