Git使用CRLF替换LF

1219
在Windows机器上,我使用git add添加了一些文件。我收到了警告信息:

LF将被替换为CRLF

这种转换会有什么影响?

20
@apphacker,标准化行尾比在比较两个文件时自己更改它们要少让人烦恼。(当然,如果您不同意,那么可以保持关闭core.autocrlf功能)。 - RJFalconer
3
除非整行被触碰,否则为什么行末会不同。 - Bjorn
4
我经常会涉及到很多行代码,因为我正在尝试不同的想法,并添加跟踪语句以查看它们的工作情况等。然后,我可能只想提交对两三行代码的更改,而让 git 完全忽略其他代码,因为我认为它们已经被恢复成了原来的样子。 - Tyler
7
@MatrixFrog: 你的编辑器好像出了问题,无法自动检测行尾结束符是哪种。它是哪一种呢? 我工作于混合项目中,该项目必须在同一个存储库中同时包含一些 LF 文件和一些其他的 CRLF 文件。对于任何现代编辑器来说都不是问题。让版本控制(或文件传输)搞乱行尾结束符来解决编辑器限制是最糟糕的想法——仅从下面的解释长度就可以明显看出。 - MarcH
7
我知道的唯一一个在现代编辑器中做错事情的是Visual Studio。Visual Studio可以轻松地打开带有LF行尾的文件。如果您插入新行,它将插入CRLF,并保存混合行尾。微软拒绝修复此问题,这是一个相当大的瑕疵,否则这个IDE还是相当不错的:--( - Jon Watte
显示剩余7条评论
25个回答

4
许多文本编辑器允许您更改为LF。请参见下面的Atom说明。它很简单明了。
在右下角点击CRLF

Enter image description here

在顶部的下拉菜单中选择LF

Enter image description here


3
在GNU/Linux的shell提示符中,dos2unixunix2dos命令可以帮助你轻松地转换/格式化来自MS Windows的文件。

它们在某些版本的Ubuntu(和可能许多其他Linux发行版)中不是默认安装的。 - Peter Mortensen

0
CR和LF是一组特殊的字符,用于格式化我们的代码。
CR(\r)将光标放在行的开头,但不创建新的一行。这是旧版macOS(今天已不适用)的工作方式。
LF(\n)创建新的一行,但不将光标放在该行的开头。光标停留在上一行的末尾。这是Unix(包括macOS)和Linux的工作方式。
CRLF(\r\n)既创建新的一行,又将光标放在新行的开头。这是我们在Windows操作系统中看到的方式。
总结一下:
1. LF(换行符) - 代表换行 - 用\n表示 - 在代码中创建新的一行 - ASCII码为10 - Unix和其他基于Unix或类似Unix的操作系统(如Linux和现代macOS)使用
2. CR(回车符)
  • 代表回车
  • 用\r表示
  • 将光标放在行的开头。
  • ASCII码为13。
  • 在Mac OS X之前的旧版本的macOS中使用。
  1. CRLF(回车和换行)
  • 代表回车和换行
  • 用\r\n表示
  • 创建一个新行并将光标放在该新行的开头。
  • LF的ASCII码为10,CR的ASCII码为13。
  • 主要用于Windows操作系统。

Git默认使用LF。因此,在Windows上使用Git时,会出现警告,如“CRLF将被替换为LF”,并自动将所有CRLF转换为LF,以使代码兼容。

NB:不用担心...把这看作是一条通知消息而不是警告。


“puts the cursnew line beginning”是什么意思(似乎无法理解)?请通过编辑(更改)您的答案来回复,而不是在评论中回复(不要包含“Edit:”,“Update:”或类似内容 - 答案应该看起来像今天写的)。 - Peter Mortensen

0
在Windows上,我之前收到了这个警告,因为我的文件名太长了。 将我的文件重新命名为更短的名称(并重新启动我的编辑器,VS Code)后,错误消失了。

-2

我曾经遇到过同样的问题,执行 git add . && git reset 命令可以正确还原所有行尾。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接