1. 程式人生 > >GIT 倉庫 換行符 LF 與 CRLF 轉換問題

GIT 倉庫 換行符 LF 與 CRLF 轉換問題

一.問題所在

在各作業系統下,文字檔案所使用的換行符是不一樣的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),後來的 OS X 在更換核心後與 UNIX 保持一致了。

但 DOS/Windows 一直使用 0x0D0A(CRLF)作為換行符。Git提供了一個“換行符自動轉換”功能。這個功能預設處於“自動模式”,當你在簽出檔案時,它試圖將 UNIX 換行符(LF)替換為 Windows 的換行符(CRLF);當你在提交檔案時,它又試圖將 CRLF 替換為 LF。

Git 的“換行符自動轉換”功能聽起來似乎很智慧、很貼心,因為它試圖一方面保持倉庫內檔案的一致性(UNIX 風格),一方面又保證本地檔案的相容性(Windows 風格)。但遺憾的是,這個功能是有 bug 的,而且在短期內都不太可能會修正。

二、解決方案

Git設定
git config --global core.autocrlf false
git config --global core.safecrlf true
含義:
AutoCRLF
#提交時轉換為LF,檢出時轉換為CRLF
git config --global core.autocrlf true
#提交時轉換為LF,檢出時不轉換
git config --global core.autocrlf input
#提交檢出均不轉換
git config --global core.autocrlf false

SafeCRLF
#拒絕提交包含混合換行符的檔案
git config --global core.safecrlf truew

#允許提交包含混合換行符的檔案

git config --global core.safecrlf false

#提交包含混合換行符的檔案時給出警告

git config --global core.safecrlf warn

*** IDE設定使用UNIX換行符
IDEA的設定File -> Settings
Editor -> Code Style
Line separator (for new lines) ,選擇:Unix and OS X (\n)


*** 也可以專案資料夾根目錄建立這個檔案 .editorconfig。內容如下:
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org

root = true

[*]

# Change these settings to your own preference
indent_style = space
indent_size = 2

# We recommend you to keep these unchanged
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false
https://editorconfig.org/ 官網editorconfig