Windows git“警告:LF将被CRLF取代”,是警告尾巴落后了吗?

时间:2013-07-13 08:12:57

标签: git

ENV:

  • Windows 7
  • msysgit

Wheng I git commit,它说:

warning: LF will be replaced by CRLF. 

此警告尾部是否向后? 我在Windows中编辑文件,行尾为CRLF,就像这张照片:
enter image description here
并且git将其更改为LF以承诺回购 所以我认为正确的警告是:

warning: CRLF will be replaced by LF. 

11 个答案:

答案 0 :(得分:147)

  

警告:LF将被CRLF取代。

根据您使用的编辑器,使用LF的文本文件无需与CRLF一起保存:最近的编辑者可以保留 eol样式。但是git配置设置坚持要改变那些......

只需确保(如I recommend here):

git config --global core.autocrlf false

这样,您就可以避免任何自动转换,并且仍然可以通过.gitattributes filecore.eol directives指定它们。


  

windows git“LF将被CRLF取代”   这个警告尾巴落后了吗?

否:你在Windows上,而git config help page确实提到了

  

如果您希望工作目录中有CRLF行结尾,请使用此设置,即使存储库没有标准化的行结尾。

如“git replacing LF with CRLF”中所述,只应在结帐(不提交)时使用core.autocrlf=true

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

XiaoPeng answer所述,该警告与以下内容相同:

  

警告:(如果您使用当前core.autocrlf配置检出/或克隆到另一个文件夹,)LF将被CRLF替换为
  该文件将在(当前)工作目录中包含其原始行结尾。

git-for-windows/git issue 1242中所述:

  

我仍然认为此消息令人困惑,可以扩展消息以包含对问题的更好解释,例如:“删除文件并再次检出后,LF将被file.json中的CRLF替换”

注意:Git 2。19(2018年9月),使用core.autocrlf时,虚假“LF 将被CRLF取代“警告现在被压制


正确地quaylar comments,如果提交转换,则仅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 /* i.e. 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上发生此转换。


注意:使用Git 2.17(2018年第二季度),代码清理会增加一些解释。

commit 8462ff4Torsten Bögershausen (tboegi)(2018年1月13日) (由Junio C Hamano -- gitster --合并于commit 9bc89b1,2018年2月13日)

  

convert_to_git():safe_crlf / checksafe成为int conv_flags

     

调用convert_to_git()时,checksafe参数定义了什么   如果EOL转换(CRLF --> LF --> CRLF)没有,则会发生   干净地往返。
  此外,它还定义了行结尾是否应重新规范化(CRLF --> LF)或保持不变。

     

checksafe是具有以下值的safe_crlf枚举:

SAFE_CRLF_FALSE:       do nothing in case of EOL roundtrip errors
SAFE_CRLF_FAIL:        die in case of EOL roundtrip errors
SAFE_CRLF_WARN:        print a warning in case of EOL roundtrip errors
SAFE_CRLF_RENORMALIZE: change CRLF to LF
SAFE_CRLF_KEEP_CRLF:   keep all line endings as they are

请注意8462ff4中引入的回归(“convert_to_git(): {GID 2.17}中的safe_crlf/checksafe变为int conv_flags“,2018-01-13,Git 2.17.0)导致autocrlf重写产生警告消息 尽管设置了safecrlf=false

commit 6cb0912Anthony Sottile (asottile)(2018年6月4日) (由Junio C Hamano -- gitster --合并于commit 8063ff9,2018年6月28日)

答案 1 :(得分:19)

警告是倒退的。

事实上,它首先应该不是警告。因为所有这些警告都说(但不幸的是倒退)是带有Windows行结尾的文件中的CRLF字符将在提交时被替换为LF。这意味着它被标准化为* nix和MacOS使用的相同行结尾。

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

此警告的当前形式是以下两种情况之一:

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

答案 2 :(得分:14)

即可。这是正确和准确的。它不是在谈论目前使用CRLF的文件。而是用LF来讨论文件。

应该是:

  

警告:(如果您使用当前的core.autocrlf配置将其签出/或克隆到另一个文件夹),则LF将替换为CRLF

     

该文件的原始行结尾位于您的(当前)工作目录中。

这张照片应该解释它的含义。 enter image description here

答案 3 :(得分:9)

所有这一切都假定为core.autocrlf=true

原始错误:

  

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

错误应该是什么:

  

警告:LF将被工作目录中的CRLF 替换
  该文件将在git存储库

中具有其原始LF行结尾

解释here

  

这种方便转换的副作用,这就是你所看到的警告,就是如果你最初创作的文本文件有LF结尾而不是CRLF,它将与LF一起存储通常情况下,但稍后退房时会有CRLF结尾。对于普通文本文件,这通常很好。警告是"为了您的信息"在这种情况下,但是如果git错误地将二进制文件评估为文本文件,则这是一个重要的警告,因为git会破坏您的二进制文件。

基本上,以前LF的本地文件现在将具有本地CRLF

答案 4 :(得分:2)

git config --global core.autocrlf false适用于全局设置。

但是如果您使用的是Visual Studio,可能还需要为某些类型的项目修改.gitattributes例如c#class library application ):

  • 删除行* text=auto

答案 5 :(得分:1)

在我设置core.autocrlf=true之后,我得到了" LF将被CRLF取代" (注意不是" CRLF将由LF"替换)当我git add(或者它可能是在git commit上?)在存储库的Windows中编辑的文件时(确实如此)使用LF)在我设置core.autocrlf=true之前检出。

我使用core.autocrlf=true进行了新的结帐,现在我没有收到这些消息。

答案 6 :(得分:1)

发生这种情况是因为 Windows 上的 GitHub Desktop 配置假定为 CRLF,但文本编辑器可能正在使用 LF。您可以更改本地存储库设置以改用 git config core.eol lf git config core.autocrlf input

导航到 git repo 的根目录并以完全相同的顺序执行

Query:
SYSTEM RELOAD DICTIONARY dim_subject_movie


Received exception from server:
Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Exception: Connections to all replicas failed: frodo@mysql1:3306 as user test, frodo@mysql1:3306 as user test (version 21.3.10.1 (official build))

Source: GitHub issue

答案 7 :(得分:0)

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

答案 8 :(得分:0)

我遇到了类似的问题,在 Windows 上使用 vscode(v1.57) 尝试了其他答案中定义的解决方案,但没有奏效。

所以对我来说以下步骤有效:

  1. 在根文件夹中有一个名为 .editorconfig 的文件
  2. 打开此文件并使用 end_of_line = lf 更改 end_of_line = crlf
  3. 运行git rm --cached,警告消失!!

答案 9 :(得分:0)

确保您在 .gitignore 文件中添加了不必要的文件或文件夹。

例如 node_modules

如果仍然面临,则运行此命令

``git config --global core.autocrlf false```

答案 10 :(得分:-1)

如果您使用的是Visual Studio 2017、2019,则可以:

  1. 打开主.gitignore(在解决方案中的其他项目中更新或删除另一个.gitignore文件)
  2. 粘贴以下代码:
[core]
 autocrlf = false
[filter "lfs"]
 required = true
 clean = git-lfs clean -- %f
 smudge = git-lfs smudge -- %f
 process = git-lfs filter-process