首先要理解的一點是,對於不一樣的操做系統,對於換行符的表示是不同的。也就是說當咱們在編輯一個文件,在鍵盤上按下回車鍵的時候,對於不一樣的操做系統保存到文件中的換行符是不同的。見下表: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
Git爲了解決上面提出的問題,會自動對換行符進行轉換。轉換的方案有3種:windows
能夠發現,若是不使用第3種方案,那麼在Git倉庫(包括本地倉庫和GitHub遠程倉庫)中保存的文件的換行符都是LF表示的。bash
咱們本身在開發過程當中,是能夠修改/設置Git的換行符轉換方案的。修改/設置的方法有2種。編輯器
設置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文件。
注意.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文件必需要提交以後才能生效。
參考博客: