前置知識
LF
代表linux
風格的行尾字元\n
CRLF
代表windows
風格的行尾字元\r\n
發生原因
在提交程式碼的時候,git
檢測到非當前系統設定的換行符,git
會將其進行轉換。
如何解決?
透過設定git
的core.autocrlf
屬性來解決。
接下來我們就來瞭解一下core.autocrlf
,然後用來解決我們的問題。
如何讀取當前git config core.autocrlf的設定?
git config core.autocrlf
可能的值?
- true
提交時:將CRLF轉換為LF
拉取時:將LF轉換為CRLF - false
提交時:什麼都不做
拉取時:什麼都不做 - input
提交時:將CRLF轉換為LF
拉取時:什麼都不做
windows系統該怎麼做?
windows
上的換行是以CRLF
結尾的,這條命令很契合。
git config core.autocrlf true
linux系統該怎麼做?
linux
上的換行是以LF
結尾的,這條命令很契合。
git config core.autocrlf input
專案中有windows和linux的開發人員該怎麼做?
一般的程式碼託管伺服器都是linux
系統,所以我們的目標是這樣:
無論你的開發人員是什麼系統,以什麼換行結尾,到了程式碼託管系統,統一以linux
為標準,也就是LF
結尾。
讓windows
使用者設定
git config core.autocrlf true
讓linux
使用者設定
git config core.autocrlf input
但是,上述的操作不太可控,比如專案裡面成員有很多,我不可能挨個去叮囑並檢查他們的設定。有沒有更好的辦法呢?
有,藉助.gitattributes
在專案的根目錄下新增一個.gitattributes檔案,內容如下:
// .gitattributes
* text eol=lf
上面的配置,意味著無論在什麼作業系統上,當你檢出檔案時,所有的行結束符都會被轉換為LF。這樣可以確保在不同作業系統之間進行協作時,檔案的行結束符始終保持一致。
疑問
疑問1:
git rm --cached -r .
git reset --hard
這不是重置.gitignore
用的嗎?這裡需要嗎?
疑問2:
新增.gitattributes後需要執行這個操作嗎?
git add --renormalize .