背景:
使用虛擬機共享windows文件夾,文件夾中用git clone 一個倉庫。在linux下編輯文件,用git status發現幾乎所有的文件都為修改狀態。
原因:
windows下和linux下的文本文件的換行符不一致。
windows:兩個字符,CR+LF,即一個回車,一個換行
linux及OS X:一個字符,LF,在Linux下查看文件如下所示,多了個^M


思考:
倉庫中是Linux下提交的代碼,那么應該是LF結尾的,那么windows下clone下來的應該也是LF結尾才對。那么是什么導致windows下變為CRLF格式結尾呢?
答:是因為git的一個設置導致的。core.autocrlf。
在windows下,git安裝時,默認該選項為true,那么效果是從倉庫下載下來,結尾會改為CRLF格式。當提交文件到倉庫時,會將CRLF格式轉為LF。那么是可以保證倉庫中的文件是LF結尾的。這樣Linux下編輯和windows下編輯都不影響了。
結論:
也就是說,我用不同的git設置,操作了同一個文件夾,那么表現肯定就不一樣了。
windows下面設置該項為true到底好不好,好像是方便了windows開發者,但這種同一個文件夾如果拷貝到Linux系統或者蘋果下面去,就會有問題了。
最佳實踐:
現在主流編輯器都能夠自動識別換行符為LF還是CRLF,如VS code,Notepad++等等。
個人認為windows下開發將編輯器默認設置為LF格式,git 該項設置為false是最好了。


如VSCode,在settings中設置file:eol 選項為\n

參考鏈接: