LF将被git中的CRLF取代 - 这是什么,它是否重要?

Lea*_*RoR 1146 git

可能重复:
git用CRLF替换LF

当我创建一个新的rails应用程序时,我在git中看到有关LF替换的警告.我做git init git add.

然后热潮!我看到几乎所有文件都弹出.我通常只是继续构建我的应用程序,它在文件的许多更改后消失了.

例:

该文件将在您的工作目录中具有其原始行结尾.警告:LF将被Gemfile中的CRLF替换.

该文件将在您的工作目录中具有其原始行结尾.警告:LF将被Gemfile.lock中的CRLF替换.

该文件将在您的工作目录中具有其原始行结尾.警告:LF将由README中的CRLF替换.

LF和CRLF有什么区别?

从长远来看,我是否应该关注这一点,或者只是忽略它并像往常一样继续前进?

Shr*_*itz 1424

在Unix系统中,行的结尾用换行符(LF)表示.在窗口中,一行用回车(CR)和换行(LF)表示(CRLF).当你从unix系统上传的git中获取代码时,他们只会有一个LF.

如果要关闭此警告,请在git命令行中键入此警告

git config core.autocrlf true
Run Code Online (Sandbox Code Playgroud)

如果你想做出明智的决定git应该如何处理这个问题,请阅读文档

这是一个片段

格式化和空白

格式化和空白问题是许多开发人员在协作时遇到的更令人沮丧和微妙的问题,尤其是跨平台问题.修补程序或其他协作工作很容易引入细微的空白更改,因为编辑器会默默地引入它们,如果您的文件曾经触及Windows系统,它们的行结尾可能会被替换.Git有一些配置选项来帮助解决这些问题.

core.autocrlf
Run Code Online (Sandbox Code Playgroud)

如果你在Windows上进行编程并与那些没有(或反之亦然)的人一起工作,那么你可能会在某些时候遇到行结束问题.这是因为Windows对其文件中的换行使用回车字符和换行符,而Mac和Linux系统仅使用换行符.这是跨平台工作的一个微妙但令人讨厌的事实; Windows上的许多编辑器默默地用CRLF替换现有的LF样式行结尾,或者在用户点击回车键时插入两个行结束字符.

当您将文件添加到索引时,Git可以通过将CRLF行结尾自动转换为LF来处理此问题,反之亦然,当它将代码签出到您的文件系统时.您可以使用core.autocrlf设置打开此功能.如果您使用的是Windows计算机,请将其设置为true - 这会在您签出代码时将LF结尾转换为CRLF:

$ git config --global core.autocrlf true
Run Code Online (Sandbox Code Playgroud)

如果您使用的是使用LF行结尾的Linux或Mac系统,那么您不希望Git在您签出文件时自动转换它们; 但是,如果意外引入了CRLF结尾的文件,那么您可能希望Git修复它.您可以告诉Git在提交时将CRLF转换为LF,但不能通过将core.autocrlf设置为输入来反转:

$ git config --global core.autocrlf input
Run Code Online (Sandbox Code Playgroud)

此设置应该在Windows签出中留下CRLF结尾,但在Mac和Linux系统以及存储库中的LF结尾.

如果您是Windows程序员,只执行Windows项目,则可以关闭此功能,通过将config值设置为false来记录存储库中的回车:

$ git config --global core.autocrlf false
Run Code Online (Sandbox Code Playgroud)

  • 试试这个`git config --global core.safecrlf false`来禁用警告并保持其正常运行.我从[这里](http://stackoverflow.com/questions/6500880/git-turn-off-lf-will-be-replaced-by-crlf-warning)得到了这个命令. (86认同)
  • `core.autocrlf true`没有关闭我的警告,但是Joel do提到的`core.safecrlf false`. (12认同)
  • 我认为应该说,通过将`core.safecrlf`设置为`false`,你不是"压制警告".您正在改变`git`检入和检出文件的行为,这种行为可能会也可能不会产生警告.对我来说,我希望它是"真实的",因为我正在开发Windows.但是,我也希望压制警告,这是一个在这个帖子中没有答案的希望. (8认同)
  • 我相信你的意思是'.line feed(LF)因此(CRLF).',你得到(CRLF)两次 (6认同)
  • 这篇文章中询问的警告指出“LF将被CRLF替换”,但是这个答案中描述的场景都涉及用LF替换CRLF(或什么也不做)。我理解该设置的行为,但它根本无法解释该警告。 (5认同)
  • 正如@JoelHandwell所提到的,只有`git config --global core.safecrlf false`抑制了我讨厌的警告 (4认同)
  • 但错误消息没有任何意义.我在Windows上并将autocrlf设置为true.我正在尝试将包含LF的文件添加到我的索引中,但是git警告我"警告:LF将被CRLF替换".难道不应该更像`verbose:LF将被LF替换掉?只有当我的本地文件包含CRLF并将其添加到索引时,或者当我检出包含LF的文件时,是否有任何转换.对? (3认同)
  • 他们有这样的警告“LF 将被 file.txt 中的 CRLF 替换”。或“CRLF 将被 file.txt 中的 LF 替换。” 什么时候?添加到索引?退房?他们不说!!他们说他们会做什么(他们不确定,因为他们不知道我是否会结帐或更改我的 core.autocrlf),但他们没有说他们已经做了什么!他们最好说出他们已经做过的事情,比如“我在索引中替换了……”。我认为这就是为什么它如此难以理解的原因之一。 (3认同)
  • @Bobort,来自[git docs](https://git-scm.com/docs/gitattributes/1.7.3.3):如果core.safecrlf设置为"true"或"warn",git将验证转换是否可逆对于core.autocrlf的当前设置.对于"真实",git拒绝不可逆转的转换; 对于"警告",git只打印一个警告但接受不可逆转的转换.根据这一点,如果您首选的行为是拒绝不可逆转的转换,则无法在不改变行为的情况下删除警告.如果您不需要这样的强制执行,将core.safecrlf设置为false会禁止警告,但仍会自动转换. (2认同)

SG *_* 86 340

如果需要,可以使用git core config取消激活此功能

git config core.autocrlf false
Run Code Online (Sandbox Code Playgroud)

但最好只使用它来消除警告

git config core.autocrlf true
Run Code Online (Sandbox Code Playgroud)

  • 嗯很奇怪,我只是将core.autocrlf设置为true(并确认git cli命令将状态返回为true).但是我仍然收到警告. (104认同)
  • 我的`git config core.autocrlf`从一开始就已经设置为'true`,但警告仍然显示出来. (28认同)
  • 我发现从`.git/config`文件中完全删除`core.autocrlf`解决了我的问题. (21认同)
  • 对我不起作用.我开始使用`core.autocrlf false`. (18认同)
  • 在[回答重复的问题](http://stackoverflow.com/a/20653073/237105)中,我描述了autocrlf = true,false和auto之间的区别.希望能帮助到你. (15认同)
  • 确认了德鲁刚刚说的话.从.git/config和〜/ .gitconfig中删除"core.autocrlf"修复了该问题. (12认同)
  • 是的,将它设置为真是最初给我警告的内容. (5认同)
  • `git config --global core.safecrlf false`来禁用警告,而不是给出的答案 (5认同)
  • 要保留 autocrlf 功能但关闭警告,请执行 `git config --global core.safecrlf false` (3认同)
  • 另外,当core.autocrlf为*true*时,我的警告就出现了.警告似乎措辞错误.不要说"警告:LF将被CRLF替换"(这就是它*所说的)不应该说"警告:LF将取代CRLF",或等效地,"警告:CRLF将被LF取代" ?警告似乎是倒退的.我是否正确通过重新修改它来纠正它或我错了? (2认同)