git在不同平臺windows、linux、mac 上換行符的問題
阿新 • • 發佈:2019-01-04
0.01 不同平臺上換行符的問題
1,不同平臺對換行符的制定不同
windows <回車換行> (carriage return AND line feed) “\n\r” CRLF
Unix系統 <換行> (carriage return) “\n” CR
window unix mac 等平臺,換行符的不同:
2,由於換行符的不同,在不同系統之間傳遞檔案產生的問題
1,文字顯示問題,windows 下的檔案在linux 下會產生 ^M 符號,而 linux 下建立編輯的檔案 在windows 下會顯示成一行;(edit plus 等軟體可以很好區分除外) 2,window 下寫的shell指令碼不能再linux下執行了(shell 直譯器對用換行符作為一個命令的提交) 3,影響版本控制軟體呢的檢入檢出,(git對於工作空間和版本庫中換行符有轉換控制)產生一些無用的檔案差異(git diff),尤其在多人協作中,每個人設定的換行符模式不同。 3,有時產生莫名其妙的問題,如果找不到原因,應該懷疑下是不是換行符的問題;
3,不同平臺換行符的轉化
windows -> unix :
1,用unix 平臺的命令工具:
1. cat a.txt | tr -d "^M" > b.txt 2. cat a.txt | sed 's/^M//g' 3. vim 中執行sed 命令替換 ( :^,$ s/^m//g ;or :s/\r//g; ) 4. dos2unix 檔案 (適用與對資料夾所有檔案進行轉化)
unix ->windows :
在window 平臺適用 UltraEdit 和 EditPlus 等工具的 可以設定換行模式進行自動轉化
或者在unix 平臺中使用命令:
1. cat a.txt | sed 's/\n/\r\n/g' 2. unix2dos 檔案 (適用與對資料夾所有檔案進行轉化)
4,在開發方面如何避免換行問題
1,ide 中像設定編碼一樣,強制在工程工作區間級別設定檔案換行 為linux 風格(設定為linux 風格的主要原因是有利與使用git少出錯,有潔癖的想法是 還能省\r 這一個位元組的內容消耗,那個檔案沒有換行? 總體來看是個划算的做法:})
eclipse 中,Windows -> Preference -> General -> workspace:
idea 中 ,
1,File->Settings…(Ctrl+Alt+S)
2,Editor->Code Style 裡面的Line separator(for new files): 選擇Unix and OS X(\n)
2,gitbash 中設定預設檢入檢出換行符為linux(\n)風格:(為了團隊更好的協作)
1,開啟自動換行
[[email protected]]$ git config --global core.autocrlf true #簽出時將換行符轉換成CRLF,簽入時轉換回 LF。 git config --global core.autocrlf true #簽出時不轉換換行符,簽入時轉換回 LF git config --global core.autocrlf input #簽出簽入均不轉換 git config --global core.autocrlf false
2,開啟安全換行
[[email protected]]$ git config --global core.safecrlf true 解釋: 如果你把換行符搞亂了,在一個檔案中既包含windows風格的換行符也包含unix風格換行符,那麼 safecrlf 就可以發揮作用了: #拒絕提交包含混合換行符的檔案 git config --global core.safecrlf true #允許提交包含混合換行符的檔案 git config --global core.safecrlf false #提交包含混合換行符的檔案時候給出警示 git config --global core.safecrlf warn