LF will be replaced by CRLF

热饭班长發表於2024-02-26

前置知識

LF代表linux風格的行尾字元\n
CRLF代表windows風格的行尾字元\r\n

發生原因

在提交程式碼的時候,git檢測到非當前系統設定的換行符,git會將其進行轉換。

如何解決?

透過設定gitcore.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 .

相關文章