Git換行符問題

問題

換系統平臺開發,從Windows換到Linux上開發,用IDE打開之前Windows下項目發現怎麼所有代碼都要在提交一遍,發現問題。git

緣由

首先,不一樣系統文本文件所用的換行符不同的,UNIX/Linux採用的是0x0A(LF),老的Mac OS用的是0x0D(CR),後來的 OS X 在更換內核後與 UNIX 保持一致了。可是呢,DOS/Windows使用的是0x0D0A(CRLF)。bash

解決

Git提供了一個「換行符自動轉換」功能,而且Windows下默認是開啓的,就是當你在簽出文件時,它試圖將 UNIX 換行符(LF)替換爲 Windows 的換行符(CRLF);當你在提交文件時,它又試圖將 CRLF 替換爲 LF。在Linux系統下,它是關閉的,因此在Linux下開發是不須要開啓的。可是,本地有以前Windows下的代碼,因此須要開啓提交時轉換爲LF。Git 提供了一個autocrlf的配置項:code

  • true: 提交時轉換爲 LF,檢出時轉換爲 CRLF
  • false: 提交檢出均不轉換
  • input: 提交時轉換爲LF,檢出時不轉換
# 提交時轉換爲LF,檢出時轉換爲CRLF
git config --global core.autocrlf true

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

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

可是,若是把 autocrlf 設置爲 false 時,那另外一個配置項 safecrlf 最好設置爲 ture。該選項用於檢查文件是否包含混合換行符,其有三個可選項:開發

  • true: 拒絕提交包含混合換行符的文件
  • false: 容許提交包含混合換行符的文件
  • warn: 提交包含混合換行符的文件時給出警告
# 拒絕提交包含混合換行符的文件
git config --global core.safecrlf true

# 容許提交包含混合換行符的文件
git config --global core.safecrlf false

# 提交包含混合換行符的文件時給出警告
git config --global core.safecrlf warn

若是二者都設爲false的話,項目中的文件可能會包含兩種格式的換行符,文件被視爲整個被修改,沒法 diff,涉及到在多個系統平臺上工做,能夠將 git 作以下配置:input

git config --global core.autocrlf input
git config --global core.safecrlf true
相關文章
相關標籤/搜索