env:

视窗 7 麦克西吉特

当我提交时,它说:

warning: LF will be replaced by CRLF. 

这个警告尾巴是向后的吗? 我在Windows中编辑文件,行尾是CRLF,就像这张图片: git将其更改为LF,用于提交回购。 所以我认为正确的警告是:

warning: CRLF will be replaced by LF. 

当前回答

Git配置——全局核心。selff false适用于全局设置。

但是如果你正在使用Visual Studio,可能还需要为某些类型的项目(例如c#类库应用程序)修改.gitattributes:

删除line * text=auto

其他回答

警告:LF将被CRLF取代。

根据您使用的编辑器的不同,带有LF的文本文件不一定要用CRLF保存:最近的编辑器可以保留eol样式。但是git的配置设置坚持要更改这些…

只要确保(正如我在这里建议的):

git config --global core.autocrlf false

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


windows git“LF将被CRLF取代”

注意:警告信息已在Git 2.37 (Q3 2022)中更改

这个警告尾巴是向后的吗?

不:你在Windows上,git配置帮助页面确实提到了

如果您希望在工作目录中有CRLF行结束符,即使存储库没有规范化的行结束符,也可以使用此设置。

正如“git用CRLF替换LF”中所描述的,它应该只发生在签出(而不是提交)时,core. selflf =true。

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

正如小鹏的回答中提到的,这个警告是:

警告:(如果你检出/或克隆到另一个文件夹与你当前的核心。自自配置,)LF将被CRLF取代 该文件将在您的(当前)工作目录中有其原始的行结束符。

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

我仍然觉得这条消息令人困惑,这条消息可以扩展到包括一个更好的解释,例如:“LF将被文件中的CRLF取代。Json后删除文件并再次签出”。

注意:Git 2.19(2018年9月),当使用核心。专制者,虚假的“LF” “CRLF”的警告现在被压制。


正如quaylar正确地评论的那样,如果在commit上有一个转换,它只是到LF。

特定的警告“LF将被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()调用。

所以我怀疑只有当提交是merge过程的一部分时,这种转换才会发生在git提交上。


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

参见Torsten提交8462ff4(2018年1月13日)Bögershausen (tboegi)。 (由Junio C Hamano—gitster—在commit 9bc89b1中合并,2018年2月13日)

Convert_to_git (): safe_crlf/checksafe变成int conv_flags

在调用convert_to_git()时,checksafe参数定义了what 如果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(): “safe_crlf/checksafe变成int conv_flags”,2018-01-13,Git 2.17.0)返回到Git 2.17周期导致selflf重写产生警告消息 尽管设置了safecrlf=false。

参见Anthony Sottile (asottile)提交的commit 6cb0912(2018年6月04日)。 (由Junio C Hamano—gitster—在commit 8063ff9中合并,2018年6月28日)

这是因为Windows上的GitHub Desktop的配置假设CRLF,但文本编辑器可能使用LF。您可以将本地存储库设置改为使用lf。

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

git config core.eol lf
git config core.autocrlf input

来源:GitHub问题

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

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

在根文件夹中有一个名为.editorconfig的文件 打开该文件,将end_of_line = lf修改为end_of_line = CRLF 运行git rm——缓存,警告消失!!

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

如。 node_modules

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

git配置——全局核心。autocrlf假的' '

关闭Visual Studio

如果你得到这个错误,一个简单的解决方法是关闭Visual Studio,然后你可以提交到main,就是这么简单。 我也遇到过同样的问题,我就是这样解决的。这是因为您要打开的文件在另一个程序中打开了。