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.autocrlf
configuration检出/克隆到另一个文件夹,则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的警告是两件事之一:
- 一个不幸的错误加上过于谨慎的警告信息,或
- 一个非常聪明的情节,让你真的想通过…
;)
所有这些假定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)