Windows的git“警告:LF将被CRLF取代”,是警告尾部向后?

ENV:

  • Windows 7的
  • msysgit

当我git commit ,它说:

 warning: LF will be replaced by CRLF. 

这个警告是尾巴吗?
我在Windows中编辑文件,行尾是CRLF ,就像这样:
在这里输入图像描述
而且git把它改为LF来提交回购。
所以我认为正确的警告是:

 warning: CRLF will be replaced by LF. 

警告:LF将由CRLF取代。

根据您使用的编辑器,带有LF的文本文件不需要用CRLF保存:最近的编辑器可以保留 eol样式。 但是,该gitconfiguration设置坚持改变那些…

只要确保(如我在这里推荐 ):

 git config --global core.autocrlf false 

这样,您可以避免任何自动转换,并且仍然可以通过.gitattributes文件和core.eol指令来指定它们。


windows git“LF将被CRLFreplace”
这个警告是尾巴吗?

不,你在Windows上,并提到git config帮助页面

如果要在工作目录中拥有CRLF行结尾,即使存储库没有标准化的行结尾,也可以使用此设置。

正如在“用gitreplace带有CRLF的LF ”中所描述的那样, 它只能在checkout (不提交)时发生, core.autocrlf=true

  repo / \ crlf->lf lf->crlf / \ 

正如肖鹏的回答中提到的那样,这个警告是一样的:

警告:(如果使用当前的core.autocrlfconfiguration检出/克隆到另一个文件夹,则LF将被CRLFreplace
该文件将在您的(当前)工作目录中具有其原始行尾。


作为quaylar正确的评论 ,如果有一个提交转换,这只是LF

该特定的警告“ LF will be replaced by CRLF ”来自convert.c#check_safe_crlf() :

 if (checksafe == SAFE_CRLF_WARN) warning("LF will be replaced by CRLF in %s. The file will have its original line endings in your working directory.", path); else /* ie SAFE_CRLF_FAIL */ die("LF would be replaced by CRLF in %s", path); 

它由convert.c#crlf_to_git()调用,本身由convert.c#convert_to_git()调用,本身由convert.c#renormalize_buffer()调用。

最后的renormalize_buffer()只能通过merge-recursive.c#blob_unchanged()

所以我怀疑这个转换发生在一个git commit只有当所述提交是一个合并过程的一部分。

的,警告是倒退。

事实上,它甚至不应该是一个警告。 因为所有这个警告是说(但不幸的是倒退)是你的文件中的Windows行结束符的CRLF字符将被replace为提交时的LF。 这意味着它被标准化为* nix和MacOS使用的相同的行结束符。

没有什么奇怪的事情发生,这正是你通常想要的行为。

目前forms的警告是两件事之一:

  1. 一个不幸的错误加上过于谨慎的警告信息,或
  2. 一个非常聪明的情节,让你真的想通过…

;)

所有这些假定core.autocrlf=true

原始错误:

警告:LF将由CRLF取代
该文件的原始行结束在您的工作目录中。

什么错误应该读:

警告:LF将被工作目录中的 CRLF所取代
该文件将在git存储库中具有其原始的LF行结束

这里解释:

这种方便的转换的副作用,这就是你看到的警告是关于,如果你最初编写的文本文件有LF结尾而不是CRLF,它将像往常一样用LF存储,但是当选中后来它会有CRLF的结局。 对于正常的文本文件,这通常是好的。 在这种情况下,警告是“供您参考”,但如果git错误地将二进制文件评估为文本文件,这是一个重要的警告,因为git会破坏您的二进制文件。

基本上,之前为LF的本地文件现在将在本地拥有CRLF

NO 。 这是正确和准确的。 这不是在谈论你的文件目前与CRLF 。 而是用LF来谈论文件。

它应该是:

警告:( 如果使用当前的core.autocrlfconfiguration检出/克隆到另一个文件夹 ,则LF将被CRLFreplace

该文件将在您的( 当前 )工作目录中具有其原始行尾。

这幅图应该解释它的含义。 在这里输入图像描述

在我设置core.autocrlf=true我得到了“LF将被CRLFreplace”(注意不是“CRLF将被replace为LF”)当我git add (或者它可能是在git commit ?)编辑的文件在设置core.autocrlf=true 之前检出的库(使用LF)的窗口中。

我用core.autocrlf=true做了一个新的结账,现在我没有收到这些消息。

做简单的事情:1.打开git-hub(Shell)并导航到属于(cd / a / b / c / …)的目录文件2.执行dos2unix(sometime dos2unix.exe)3.立即尝试提交。 如果你再次得到相同的错误。 执行除了dos2unix以外的所有上述步骤,执行unix2dox(某些时候是unix2dos.exe)