Git操做中crlf和lf衝突問題

多人蔘與項目開發的時候,常常會遇到代碼格式化不一致,在提交的時候出現不少衝突的狀況。其中換行符衝突就是一種,在不一樣的系統平臺上是不同的。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),就會出現老是互相覆蓋的狀況。如下是解決換行符衝突的解決方案:html

一、編輯器統一git

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

git config --global core.autocrlf false複製代碼

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

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

二、git方式統一編輯器

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

# 提交時轉換爲LF,檢出時不轉換
git config --global core.autocrlf input

# 拒絕提交包含混合換行符的文件
git config --global core.safecrlf true複製代碼

三、EditorConfigspa

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

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

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

四、prettierhtm

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

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

由於咱們現有的項目都已經支持prettier,天然就使用了【husky+lint-staged+prettier】的方式,來支持全部代碼格式化成 lf 換行符。

相關文章
相關標籤/搜索