-
問題描述:
Window平臺(tái)下使用“git add .”出現(xiàn)“warning: LF will be replaced by CRLF”的提示:
-
問題解決:
那么遇到這種問題該如何解決呢改览?下翎?
git config --global core.autocrlf true //注意--前面有空格!宝当!
如果我們目前是Window平臺(tái)并出現(xiàn)該警告视事,啥也別做就行,雖然這個(gè)警告難看庆揩,但這個(gè)警告能保證我們項(xiàng)目團(tuán)隊(duì)正忱跨系統(tǒng)git操作代碼.
因?yàn)間it的Windows 客戶端基本都會(huì)默認(rèn)設(shè)置 core.autocrlf=true(我們可通過git config core.autocrlf命令查詢我們的Windows上該屬性是否默認(rèn)true.如不是true,通過config --global core.autocrlf true命令設(shè)置該屬性為true),而“core.autocrlf=true”有以下3個(gè)功能來避免我們出錯(cuò):
(A)在“把 modified修改過的文件git add到暫存區(qū)stage”時(shí)订晌,Git自動(dòng)把LF轉(zhuǎn)換成CRLF,并給出那條警告”LF will be replaced by CRLF”
(B)在“把modified修改過的文件由暫存區(qū)(stage) 提交(commit)到版本庫/倉庫(repository)”時(shí)虏辫,Git自動(dòng)把CRLF轉(zhuǎn)換成LF
?在“用 檢出/git checkout切換到指定分支 或 git clone克隆遠(yuǎn)程版本庫”來加載代碼時(shí),Git自動(dòng)把LF轉(zhuǎn)換成CRLF
提到的那句警告:“IF will be replaced by CRLF in ”
這句警告的下面其實(shí)還有一句很重要的話:The file will have its original line endings in your working directory.
-
問題原因:
我們?cè)赪indows平臺(tái)下git add任意Windows平臺(tái)編輯過的代碼文本的換行默認(rèn)都是CRLF锈拨,所以一般git add不會(huì)出錯(cuò).但是如果如下的(i)或者(ii)發(fā)生了砌庄,那我們?cè)龠M(jìn)行g(shù)it add這個(gè)LF換行的文件時(shí),會(huì)出現(xiàn)這個(gè)警告" LF will be replaced by CRLF in …".
(i)我們的團(tuán)隊(duì)成員是Linux/Mac平臺(tái)并參與了項(xiàng)目的git提交
(ii)我們Windows平臺(tái)的某些軟件會(huì)生成換行是LF的代碼文本(如git add的是Webstorm生成的HTML項(xiàng)目中隱藏文件夾.idea中的workspace.xml,這個(gè)xml文件換行是LF)
(1)不同操作系統(tǒng)下奕枢,處理行尾結(jié)束符的方法是不同的:
(A)Windows和Dos下:使用回車(CR)和換行(LF)兩個(gè)字符來結(jié)束一行娄昆,回車+換行(CR+LF),即“\r\n”缝彬;
(B)Unix和mac下:只使用換行(LF)一個(gè)字符來結(jié)束一行萌焰,即“\n”;
(最早Mac每行結(jié)尾是回車CR 即’\r’谷浅,后mac os x 也投奔了 unix)
(2)Git下處理“換行”(line ending)
core.autocrlf是git中負(fù)責(zé)處理line ending的變量扒俯,可以設(shè)置3個(gè)值:true,false一疯,input.
(A)設(shè)置為true【config --global core.autocrlf true】
當(dāng)設(shè)置成true時(shí)撼玄,這意味著你在任何時(shí)候添加(add)文件到git倉庫時(shí),git都會(huì)視為它是一個(gè)文本文件(text file).
它將把crlf變成LF.
(B)設(shè)置為false【config --global core.autocrlf false】
當(dāng)設(shè)置成false時(shí)违施,line endings將不做轉(zhuǎn)換操作.文本文件保持原來的樣子.
?設(shè)置為input時(shí)互纯,添加文件git倉庫時(shí)瑟幕,git把crlf編程lf.當(dāng)有人Check代碼時(shí)還是lf方式.因此在window操作系統(tǒng)下磕蒲,不要使用這個(gè)設(shè)置. -
此問題的負(fù)面影響
格式化與多余的空白字符留潦,特別是在跨平臺(tái)情況下,有時(shí)候是一個(gè)令人發(fā)指的問題.由于編輯器的不同或者文件行尾的換行符在 Windows 下被替換了辣往,一些細(xì)微的空格變化會(huì)不經(jīng)意地混入提交兔院,造成麻煩.雖然這是小問題,但會(huì)極大地?cái)_亂跨平臺(tái)協(xié)作.
假如你正在Windows上寫程序;又或者你正在和其他人合作站削,他們?cè)赪indows上編程坊萝,而你卻在其他系統(tǒng)上,在這些情況下许起,你可能會(huì)遇到行尾結(jié)束符問題.此問題的全部負(fù)面影響如下:
(1)一個(gè)直接后果是十偶,Unix/Mac系統(tǒng)下的一個(gè)“多行文本”文件在Windows里打開的話,“多行文本”會(huì)變成“一行”.(原因:Unix/Mac換行只用了換行符‘\n’园细,而Windows的換行要求是回車換行符’\r\n’惦积,因此Unix/Mac中的“多行文本”的換行不符合Windows的規(guī)則,所以Windows對(duì)這些不符合換行規(guī)則的“多行文本”全部按照“沒有換行”處理猛频,所以導(dǎo)致“多行文本”會(huì)變成“一行”)
(2)而Windows里的文件在Unix/Mac下打開的話狮崩,在每行的結(jié)尾可能會(huì)多出一個(gè)^M符號(hào).
(3)Linux保存的文件在windows上用記事本看的話會(huì)出現(xiàn)黑點(diǎn).