git提交/拉取時換行符不一致導致 提示 "the text is identical, but the files do not match, newlines"等字樣


首先普及下基本知識:

       CRLF是Carriage-Return Line-Feed的縮寫,意思是回車換行,就是回車(CR, ASCII 13, \r) 換行(LF, ASCII 10, \n)。換行在有的ASCII碼錶也用newline(簡nl)來進行表示,這裏的lf是line feed的概念,意思是一樣的

       CRLF ----------   '\n\r'          回車換行

       CR     ----------    '\n'            回車

       LF      ----------    '\r'             換行

 

window unix mac 等平臺,換行符的不同:

系統 換行符
windows \n\r
unix \n
mac \r

 

      假如你正在Windows上寫程序,又或者你正在和其他人合作,他們在Windows上編程,而你卻在其他系統上,在這些情況下,你可能會遇到行尾結束符問題。這是因爲Windows使用回車和換行兩個字符來結束一行,而Mac和Linux只使用換行一個字符。雖然這是小問題,但它會極大地擾亂跨平臺協作。

       Git可以在你提交時自動地把行結束符CRLF轉換成LF,而在簽出代碼時把LF轉換成CRLF。用core.autocrlf來打開此項功能,如果是在Windows系統上,把它設置成true,這樣當簽出代碼時,LF會被轉換成CRLF,有以下幾種方案:

    1. 在安裝“Git for windows”的時候,在“Configuing the line ending conversions”頁面,將默認選中改爲“Checkout as-is, commit as-is”

    2. 如果已經安裝過了,也可以通過命令行修改,打開“Git Bash”,然後輸入
        $ git config --global core.autocrlf input

    3.也可以在“Git Bash”中修改~/.gitconfig文件,加入或修改
        [core]
                autocrlf = input

    4.如果使用TortoiseGit,可以在setting的Git配置中選擇Global模式,取消選中“AutoCrlf”,然後保存配置

以下兩種模式下對應的命令:

1> AutoCRLF
	#提交時轉換爲LF,檢出時轉換爲CRLF
	git config --global core.autocrlf true   

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

	#提交檢出均不轉換
	git config --global core.autocrlf false
	
2>SafeCRLF
	#拒絕提交包含混合換行符的文件
	git config --global core.safecrlf true   

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章