您的位置:首页 > 其它

Windows下使用Git add时警告:warning:LF will be replaced by CRLF in ××××.××

2018-02-23 17:02 411 查看
Windows下Git使用报错:warning:LF will be replaced by CRLFin ××××.××(文件名)
The file will have its original line ending in your working directory.
翻译:
警告:在xxx.xx文件中LF将被CRLF替换。
在你的工作区(working directory)里,这个文件将会保持它原本的换行符。(line ending:行尾,换行)
CR:Carriage Return 回车\r
LF:Line Feed  换行 \n
CRLF:Carriage Return Line Feed 回车换行\r\n
出现原因:
这是因为在Windows中的换行符为CRLF,而在Linux中的换行符为LF。在git创建的项目中换行符为LF,而gits是linux环境,Git自作聪明的“换行符自动转换”功能会自动进行转换,然后系统会提示LF将被转换为CRLF。
解决的办法很简单,禁止git的自动转换即可。

解决方法:
1、如果版本库/项目还没被创建,执行以下操作:
git config --global core.autocrlf false     //在全局禁用自动转换
2、如果版本库/
ab2c
项目已经创建,使用非全局禁用自动转换
git config core.autocrlf false                    //在当前版本库中禁用自动转换
3、如果版本库/项目已经创建,在全局禁用自动转换则需要先删除之前创建的.git 文件后添加上面的设置。 
此操作很坑!是删除整个.git,会把跟远程的链接都断掉,整个git的提交历史/版本库都会被删除!
rm -rf .git
git config --global core.autocrlf false     //在全局禁用自动转换
完成后再重新执行git创建版本库操作:
git init
git add ...
git remote add ***
这样设置git的配置后在执行add操作就没有问题了。

问题分析:
1、不同操作系统下,处理行尾结束符的方法是不同的:
win下:  CRLF    \r\n(0x0D,0x0A)回车换行,表示句尾使用回车换行两个字符,
                                  即windows下的"\r\n"换行,回车(CR,ASCII 13, \r)换行(LF, ASCII 10, \n)
unix下: LF        \n(0x0A)换行(表示句尾,只使用换行)
mac下: CR       \r (0x0D)回车
2、Git下处理“换行”(line ending)
core.autocrlf是git中负责处理line ending的变量,可以设置3个值:true,false,inout。
(1)设置为true【config --global core.autocrlf true】
当设置成true时,这意味着你在任何时候添加(add)文件到git仓库时,git都会视为它是一个文本文件(text file)。它将把crlf变成LF。
(2)设置为false【config --global core.autocrlf false】
当设置成false时,line endings将不做转换操作。文本文件保持原来的样子。
(3)设置为input时,添加文件git仓库时,git把crlf编程lf。当有人Check代码时还是lf方式。因此在window操作系统下,不要使用这个设置。
3、综上,出现上面那个警告的原因是:windows中的换行符为CRLF,而Linux下的换行符为LF(使用Git命令行Git Bash,实际上就是相当于linux环境),所以在执行git add xxx.xx操作时,会出现这个错误提示!

拓展:
1、关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。
一个叫做“回车”(carriage return),告诉打字机把打印头定位到左边界;
另一个叫做“换行”(line feed),告诉打字机把打印头放到所要打印纸的下一行开头。
这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
回车 \r 本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return;
换行 \n 本义是光标往下一行(不一定到下一行行首),n的英文newline,控制字符可以写成LF,即Line Feed;
符号    ASCII码      意义
\n        10            换行NL
\r        13             回车CR
Windows系统里,每行结尾是“<回车><换行>”,即“\r\n”;
Mac系统里,每行结尾是“<回车>”,即“\r”。
Unix系统里,每行结尾只有“<换行>”,即“\n”;
而分歧导致的直接后果是,
Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;
而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
2、软回车和硬回车
再扩展一下回车的一些知识。
硬回车就是普通我们按回车Enter产生的,它在换行的同时也起着段落分隔的作用。 
软回车是用 Shift + Enter 产生的,它换行,但是并不换段,即前后两段文字在 Word 中属于同一“段”。在应用格式时你会体会到这一点。
软回车能使前后两行的行间距大幅度缩小,因为它不是段落标记,要和法定的段落标记——硬回车区别出来。硬回车的html代码是<p>..</p>,段落的内容就夹在里面,而软回车的代码很精悍:<br>。网页的文字如果复制到word中,则硬回车变为弯曲的箭头,软回车变为向下的箭头。

转载自: http://www.haowt.info/archives/403.html https://www.cnblogs.com/helloHKTK/p/7351946.html http://blog.csdn.net/fanwenbo/article/details/54848429 http://blog.jobbole.com/46200/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: