1. 程式人生 > >git在不同平臺windows、linux、mac 上換行符的問題

git在不同平臺windows、linux、mac 上換行符的問題

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