針對git上傳文件出現的warning: LF will be replaced by CRLF的解決辦法

Git提示“warning: LF will be replaced by CRLF”

  1. 問題描述:
    Window平臺下使用“git add .”出現“warning: LF will be replaced by CRLF”的提示:
    在這裏插入圖片描述
  2. 問題解決:
    那麼遇到這種問題該如何解決呢??
git config --global core.autocrlf true //注意--前面有空格!!

如果我們目前是Window平臺並出現該警告,啥也別做就行,雖然這個警告難看,但這個警告能保證我們項目團隊正常跨系統git操作代碼.
因爲git的Windows 客戶端基本都會默認設置 core.autocrlf=true(我們可通過git config core.autocrlf命令查詢我們的Windows上該屬性是否默認true.如不是true,通過config --global core.autocrlf true命令設置該屬性爲true),而“core.autocrlf=true”有以下3個功能來避免我們出錯:
(A)在“把 modified修改過的文件git add到暫存區stage”時,Git自動把LF轉換成CRLF,並給出那條警告”LF will be replaced by CRLF”
(B)在“把modified修改過的文件由暫存區(stage) 提交(commit)到版本庫/倉庫(repository)”時,Git自動把CRLF轉換成LF
©在“用 檢出/git checkout切換到指定分支 或 git clone克隆遠程版本庫”來加載代碼時,Git自動把LF轉換成CRLF
提到的那句警告:“IF will be replaced by CRLF in ”
這句警告的下面其實還有一句很重要的話:The file will have its original line endings in your working directory.
3. 問題原因:
我們在Windows平臺下git add任意Windows平臺編輯過的代碼文本的換行默認都是CRLF,所以一般git add不會出錯.但是如果如下的(i)或者(ii)發生了,那我們再進行git add這個LF換行的文件時,會出現這個警告" LF will be replaced by CRLF in …".
(i)我們的團隊成員是Linux/Mac平臺並參與了項目的git提交
(ii)我們Windows平臺的某些軟件會生成換行是LF的代碼文本(如git add的是Webstorm生成的HTML項目中隱藏文件夾.idea中的workspace.xml,這個xml文件換行是LF)
(1)不同操作系統下,處理行尾結束符的方法是不同的:
(A)Windows和Dos下:使用回車(CR)和換行(LF)兩個字符來結束一行,回車+換行(CR+LF),即“\r\n”;
(B)Unix和mac下:只使用換行(LF)一個字符來結束一行,即“\n”;
(最早Mac每行結尾是回車CR 即’\r’,後mac os x 也投奔了 unix)
(2)Git下處理“換行”(line ending)
core.autocrlf是git中負責處理line ending的變量,可以設置3個值:true,false,input.
(A)設置爲true【config --global core.autocrlf true】
當設置成true時,這意味着你在任何時候添加(add)文件到git倉庫時,git都會視爲它是一個文本文件(text file).
它將把crlf變成LF.
(B)設置爲false【config --global core.autocrlf false】
當設置成false時,line endings將不做轉換操作.文本文件保持原來的樣子.
©設置爲input時,添加文件git倉庫時,git把crlf編程lf.當有人Check代碼時還是lf方式.因此在window操作系統下,不要使用這個設置.
4.此問題的負面影響
格式化與多餘的空白字符,特別是在跨平臺情況下,有時候是一個令人髮指的問題.由於編輯器的不同或者文件行尾的換行符在 Windows 下被替換了,一些細微的空格變化會不經意地混入提交,造成麻煩.雖然這是小問題,但會極大地擾亂跨平臺協作.
假如你正在Windows上寫程序;又或者你正在和其他人合作,他們在Windows上編程,而你卻在其他系統上,在這些情況下,你可能會遇到行尾結束符問題.此問題的全部負面影響如下:
(1)一個直接後果是,Unix/Mac系統下的一個“多行文本”文件在Windows裏打開的話,“多行文本”會變成“一行”.(原因:Unix/Mac換行只用了換行符‘\n’,而Windows的換行要求是回車換行符’\r\n’,因此Unix/Mac中的“多行文本”的換行不符合Windows的規則,所以Windows對這些不符合換行規則的“多行文本”全部按照“沒有換行”處理,所以導致“多行文本”會變成“一行”)
(2)而Windows裏的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號.
(3)Linux保存的文件在windows上用記事本看的話會出現黑點.

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