1. 程式人生 > >Git操作中crlf和lf沖突問題

Git操作中crlf和lf沖突問題

com ORC false span targe stage get http 為我

多人參與項目開發的時候,經常會遇到代碼格式化不一致,在提交的時候出現很多沖突的情況。其中換行符沖突就是一種,在不同的系統平臺上是不一樣的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是 0x0D(CR),後來的 OS X 在更換內核後與 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF) 作為換行符。所以會出現使用mac的開發者修改的代碼中是lf換行,windows用戶使用的crlf換行符,總是互相影響。還有一個原因是,git默認配置了autocrlf為true,也就是說默認所有代碼都會被提交成了crlf,但是如果不同開發者自己配置的autocrlf配置不一致(比如,input或者false),就會出現總是互相覆蓋的情況。以下是解決換行符沖突的解決方案:

1、編輯器統一

a. 修改git全局配置,禁止git自動將lf轉換成crlf, 命令:

git config --global core.autocrlf false

b. 修改編輯器的用戶配置,例如vscode

"files.eol": "\n", // 文件換行使用lf方式

2、git方式統一

git提交的時候,文件中的換行符必須是LF,如果不是不能提交。

# 提交時轉換為LF,檢出時不轉換
git config --global core.autocrlf input
# 拒絕提交包含混合換行符的文件 git config
--global core.safecrlf true

3、EditorConfig

主流編輯器都支持EditorConfig,配置end_of_line後,你編輯的代碼會自動轉化為對應的換行符。當然你需要將autocrlf關閉,防止再次被轉換成其他格式,

# 取值包括 crlf,lf,cr
end_of_line = lf

# 提交檢出均不轉換
git config --global core.autocrlf false

4、prettier

prettier是目前非常流行的代碼格式化工具,提供了endOfLine來支持格式化換行符。

{
  // ...
  "endOfLine" : "lf"
  //
... }
# 提交檢出均不轉換
git config --global core.autocrlf false

因為我們現有的項目都已經支持prettier,自然就使用了【husky+lint-staged+prettier】的方式,來支持所有代碼格式化成 lf 換行符。

Git操作中crlf和lf沖突問題