Git中CRLF與LF的轉換

1.換行符在不一樣的操做系統上的表示

首先要理解的一點是,對於不一樣的操做系統,對於換行符的表示是不同的。也就是說當咱們在編輯一個文件,在鍵盤上按下回車鍵的時候,對於不一樣的操做系統保存到文件中的換行符是不同的。見下表:java

CR:表示回車\r
LF:表示換行\n
CRLF:表示回車換行\r\n

敲下回車鍵,不一樣的操做系統保存到文件中的值:
Windows:使用的是CRLF ==> 即\r\n,文件中保存的是\r\n
Linux/Unix: 使用的是LF ==> 即\n,文件中保存的是\n
Mac OS: 使用的是CR ==> 即\r,文件中保存的是\r
Mac OS X系統:使用的是LF ==> 即\n,文件中保存的是\n(Mac OS X已經改爲和Unix/Linx同樣使用LF)

問題: 既然不一樣的操做系統,對於換行符使用不一樣的表示形式,若是一個團隊在開發一個共同的項目,若是你使用的是windows系統,而你的小夥伴用的是Mac的話,當大家使用git協同開發軟件時,就會出現換行符不統一的問題。git

雖然對於不一樣的操做系統,默認的換行符的表示方法不同,可是編輯器是能夠設置在敲下回車鍵的時候保存的換行符是什麼的,好比經常使用的vscode就能夠進行設置。直接點擊編輯器右下角的LF或者CRLF,出現以下圖所示的設置,直接選擇便可。在設置完成以後,在敲回車鍵,保存在文件中的換行符就是你設置的(CRLF或者是LF,設置什麼就是什麼)。segmentfault

2.Git會自動對換行符進行轉換

Git爲了解決上面提出的問題,會自動對換行符進行轉換。轉換的方案有3種:windows

  1. 在提交時將CRLF轉換爲LF,在拉取(檢出checkout)時將UNIX換行符(LF)替換成CRLF。(Windows系統推薦使用,咱們在windows上安裝git的時候,若是一路next,默認是使用這個方案)
  2. 在提交時將CRLF轉換爲LF,在拉取(檢出checkout)時不進行轉換。(Linux/Unix和Mac OS和Mac OS X推薦使用,在Unix或者類Unix操做系統上安裝git,默認使用這種方案)
  3. 不進行轉換(這種方案對於跨平臺項目不推薦使用)。

能夠發現,若是不使用第3種方案,那麼在Git倉庫(包括本地倉庫和GitHub遠程倉庫)中保存的文件的換行符都是LF表示的。bash

3.本身指定換行符轉換方案

咱們本身在開發過程當中,是能夠修改/設置Git的換行符轉換方案的。修改/設置的方法有2種。編輯器

3.1 經過Git的全局配置進行修改

設置autoclf屬性,在控制檯直接運行以下的一條命令就能夠設置了:ui

// 提交時轉換爲LF,檢出時轉換爲CRLF
git config --global core.autocrlf true   

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

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

上述命令運行以後,會修改.gitconfig文件。操作系統

通常在項目中,爲了不項目中同時出現CRLF和LF,還能夠開啓safecrlf檢查。固然,若是你的項目本身定義了語法檢查規則,例如使用eslint去約束換行符必須是LF,那麼當你的文件中出現CRLF的時候,eslint會給你錯誤提示信息,告訴你不能包含CRLF,這時候,不開啓safecrlf也是能夠的 (通常建議開啓)eslint

開啓方法以下第一條命令:code

// 拒絕提交包含混合換行符的文件 (通常設置爲true)
git config --global core.safecrlf true   

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

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

上述命令運行以後,也會修改.gitconfig文件。

3.2 經過.gitattributes進行修改

注意.gitattributes是針對一個單一的倉庫的,也就是說每個代碼倉庫均可以包含一個.gitattributes文件。這種方式設置以後,不須要一個項目組裏面的同事分別再去修改本身電腦的git的全局配置。

對於經過.gitattributes設置換行符的轉換方案,可使用以下的命令:

1. text=auto:採用git認爲最好的方式來處理文件,未在.gitattributes中設置的項默認按照這種方式處理;

2. text eol=crlf:對左邊匹配的文件統一使用CRLF換行符格式,若是有文件中出現LF將會轉換成CRLF;

3. text eol=lf:對左邊匹配的文件統一使用LF換行符格式,若是有文件中出現CRLF將會轉換成LF;

4. binary: 告訴git該文件爲二進制,防止git修改該文件。git不會對對其中的換行符進行改變。

注意:.gitattributes文件必需要提交以後才能生效。

參考博客:

  1. https://segmentfault.com/a/1190000013973362?utm_medium=referral&utm_source=tuicool
  2. https://www.jianshu.com/p/f13ef9e538e0
相關文章
相關標籤/搜索