Git提示“warning: LF will be replaced by CRLF”
感谢原文作者:萌新李同学(李俊德-大连理工大学)
原文链接:https://blog.csdn.net/wq6ylg08/article/details/88761581
问题描述
windows平台下使用git add
,git deploy
文件时经常出现“warning: LF will be replaced by CRLF
” 的提示
换行符与回车符的由来
1. 换行符‘\n’和回车符‘\r’
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。
(A)回车符就是回到一行的开头,用符号r
表示,十进制ASCII代码是13,十六进制代码为0x0D,回车(return);
(B)换行符就是另起一行,用n
符号表示,ASCII代码是10,十六制为0x0A, 换行(newline)。
2. LF和CRLF区别
LF: Line Feed换行
feed v.喂养,供给;将(信息)输入 line feed直译是”将行输入”,再意译”换行”CRLF: Carriage Return Line Feed 回车换行
Carriage n.马车,火车车厢;运输费用 在carriage return中,carriage译为“车”,return译为“回”
在过去的机械打字机上有个部件叫「字车」(Typewriter carriage),每打一个字符,字车前进一格,打完一行后,我们需要让字车回到起始位置,而“Carriage Return”键最早就是这个作用,因此被直接翻译为「回车」。尽管后来回车键的作用已经不止” 倒回字车”那么简单,但这个译名一直被保留下来。
问题分析
这句警告出现的原因:我们在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)
不同操作系统下,处理行尾结束符的方法是不同的:
(A)Windows和Dos下:使用回车(CR)和换行(LF)两个字符来结束一行,回车+换行(CR+LF),即“\r\n
”;
(B)Unix和mac下:只使用换行(LF)一个字符来结束一行,即“\n
”;
(最早Mac每行结尾是回车CR 即’\r’,后mac os x 也投奔了 unix)Git下处理“换行”(line ending)
core.autocrlf
是git中负责处理line ending
的变量,可以设置3个值:true
,false
,input
。
(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操作系统下,不要使用这个设置。
此问题的负面影响
格式化与多余的空白字符,特别是在跨平台情况下,有时候是一个令人发指的问题。由于编辑器的不同或者文件行尾的换行符在 Windows 下被替换了,一些细微的空格变化会不经意地混入提交,造成麻烦。虽然这是小问题,但会极大地扰乱跨平台协作。
假如你正在Windows上写程序;又或者你正在和其他人合作,他们在Windows上编程,而你却在其他系统上,在这些情况下,你可能会遇到行尾结束符问题。此问题的全部负面影响如下:
- 一个直接后果是,Unix/Mac系统下的一个“多行文本”文件在Windows里打开的话,“多行文本”会变成“一行”。(原因:Unix/Mac换行只用了换行符‘\n’,而Windows的换行要求是回车换行符’\r\n’,因此Unix/Mac中的“多行文本”的换行不符合Windows的规则,所以Windows对这些不符合换行规则的“多行文本”全部按照“没有换行”处理,所以导致“多行文本”会变成“一行”)
- 而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
- Linux保存的文件在windows上用记事本看的话会出现黑点。
解决此问题的方案
(1)如果我们目前是Window平台并出现该警告,啥也别做就行,虽然这个警告难看,但这个警告能保证我们项目团队正常跨系统git操作代码
因为git的Windows 客户端基本都会默认设置 core.autocrlf=true
(我们可通过git config core.autocrlf
命令查询我们的Windows上该属性是否默认true
。如不是true
,通过config --global core.autocrlf true
命令设置该属性为true
),而“core.autocrlf=true
”有以下3个功能来避免我们出错:
(Ⅰ)在“把 modified
修改过的文件git add
到暂存区stage
”时,Git自动把LF转换成CRLF,并给出那条警告”LF will be replaced by CRLF
”
(Ⅱ)在“把modified
修改过的文件由暂存区(stage
) 提交(commit
)到版本库/仓库(repository
)”时,Git自动把CRLF
转换成LF
(Ⅲ)在“用 检出git checkout
切换到指定分支 或 git clone
克隆远程版本库”来加载代码时,Git自动把LF
转换成CRLF
提到的那句警告:“LF will be replaced by CRLF in <file-name>
”
这句警告的下面其实还有一句很重要的话:The file will have its original line endings in your working directory.
(翻译:“在工作区里,这个文件会保留它原本的换行符”)
(2)如果我们是Linux 或 Mac平台,我们不需要(Ⅲ)的功能“在检出或克隆远程版本库时,Git自动把LF
转换成CRLF
”。然而当一个CRLF
作为行结束符的文件在我们的Linux 或 Mac平台不小心被引入时,你肯定想让 Git 修正。 所以,你可以通过config --global core.autocrlf input
命令把 core.autocrlf
设置成 input
来告诉 Git 在提交(commit)时把CRLF
转换成LF,检出(git checkout
)时不转换
(1)+(2):这样在 Windows 上的检出(checkout
)文件中会保留CRLF
,而在 Mac 和 Linux 上,以及版本库中会保留LF
,从而保证我们项目团队正常跨系统git操作代码
本文参考来源:
[1] https://www.jianshu.com/p/450cd21b36a4
[2] https://blog.csdn.net/tfstone/article/details/79822747
[3] https://blog.csdn.net/qq_37859539/article/details/79870835
Git提示“warning: LF will be replaced by CRLF”的更多相关文章
- 关于git提示“warning: LF will be replaced by CRLF”终极解答
一.发现问题 windows平台下使用git add,git deploy 文件时经常出现“warning: LF will be replaced by CRLF” 的提示. 网上很多解决办法提到: ...
- git出现warning: LF will be replaced by CRLF的解决方法
今天ytkah用git上传文件的时候出现了warning: LF will be replaced by CRLF的错误,具体信息如下,这是因为跨平台开发下产生的.由于编辑器的不同或者Windows程 ...
- git add * 提示warning: LF will be replaced by CRLF in 解决办法
在使用git的时候,每次执行 $ git add * 都会提示这样一个警告消息: 虽然说没有什么影响吧. 不过就是觉得太碍眼了, 按照这样设置就没有问题了: git config core.autoc ...
- Git:warning: LF will be replaced by CRLF
windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示,解决办法: $ rm -rf .git // 删除.git $ git config --gl ...
- 关于git报 warning: LF will be replaced by CRLF in README.md.的警告的解决办法
在使用git把代码上传至仓库时,会有下面这种警告: 虽然说是警告,但是看着真的很碍眼啊,特别是有强迫症的人就更难受了. 输入这一行命令就可以完美解决了 git config core.autocrlf ...
- git add . 的时候遇到warning: LF will be replaced by CRLF inXXX 解决办法
$ git add . warning: LF will be replaced by CRLF in shop/Runtime/Cache/86bbc820c9ec1 d314a9c71cf5651 ...
- 错误 warning: LF will be replaced by CRLF in README.md.
问题类型 windows中的换行符为 CRLF, 而在Linux下的换行符为LF,所以在执行add . 时出现提示:warning: LF will be replaced by CRLF in RE ...
- git提交时”warning: LF will be replaced by CRLF“提示
今天把项目做完之后,然后用Git准备提交代码的时候,遇到warning: LF will be replaced by CRLF警告. 当时在网上查了资料,发现很多的解决办法都是:修改git全局配置, ...
- git warning: LF will be replaced by CRLF in 解决办法
在使用git的时候,每次执行 #git add "目录" git add . 都会提示这样一个警告消息: warning: LF will be replaced by CRLF ...
随机推荐
- Springcloud-alibaba学习实践(2)- nacos&Eureka Server服务注册实践
前言:上一篇已搭建好了springcloud服务注册中心(Nacos&Eureka Server),本篇继续代码实践,注册服务到服务中心,本篇只是演示了两种注册中心,后续我们以Nacos注册中 ...
- Simplicial principal component analysis for density functions in Bayes spaces
目录 问题 上的PCA Hron K, Menafoglio A, Templ M, et al. Simplicial principal component analysis for densit ...
- Ubuntu复习笔记-认识Linux
本次复习基于\(Ubuntu20.04\)的发行版进行总结,目的是更好记录自己学习的\(Linux\). 认识Linux 学习\(Linux\)之前,需要搞懂几个概念,\(Linux\)桌面操作系统与 ...
- 揭开“QUIC”的神秘面纱
作者:赵咏 QUIC的发音类似于Quick,实际上也确实很快.它可以很好地解决应用在传输层和应用层面临的各种需求,包括处理更多的连接.安全性以及低延迟. 目前在互联网领域,QUIC可以说刮起了新一代互 ...
- mysql语句3-插入、修改删除表
二.DML数据操纵语句 关键字:insert(插入) delete(删除) update(更新) select(查询) 1.表创建好以后,就可以插入记录了,语法如下: 方法一 :insert i ...
- Python max()方法扩展:求字典中值最大的键
重要的应该写在前面[捂脸] 场景一:仅求最大值对应的键,代码如下: >>> dic = {'A':4, 'B':2, 'C':3} >>> max_key = ...
- java 方法 compareTo()的正确使用
总结:(1)如果比较的是数字 则结果大于则为1 等于则为0 小于则为-1(2)如果比较的是字符[串] 则按照从左到右排序找对应不一样的字符第一个字符, 然后将字符装对应的ASCLL码数字,做减法运算, ...
- Java语言学习案例雷霆战机
1.Java雷霆战机学习笔记(一)-资源加载 https://www.toutiao.com/i6631331313259381255/ 2.Java雷霆战机学习笔记(二)-音乐播放 https:// ...
- redis的bind误区
对于Redis中bind的正确的理解是:bind:是绑定本机的IP地址,(准确的是:本机的网卡对应的IP地址,每一个网卡都有一个IP地址),而不是redis允许来自其他计算机的IP地址.如果指定了bi ...
- 基于Appium的APP自动化测试基础--美团APP的实例
转:https://blog.csdn.net/Tigerdong1/article/details/80159156 前段时间用一种流行语言,一个主流工具,一个实用框架,写了一个美团app自动化测试 ...