小编典典

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

all

环境:

  • Windows 7的
  • msysgit

当我git commit,它说:

warning: LF will be replaced by CRLF.

这个警告尾巴是向后的吗?
我在 Windows 中编辑文件,行尾是CRLF,就像这张图片:
在此处输入图像描述
并且 git 将其更改为LF以提交 repo。
所以我认为正确的警告是:

warning: CRLF will be replaced by LF.

阅读 94

收藏
2022-07-30

共1个答案

小编典典

警告:LF 将被 CRLF 取代。

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

只需确保:

git config --global core.autocrlf false

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


windows git “LF 将被 CRLF 替换”

注意:警告消息已随 Git 2.37(2022年第三季度)更改

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

否:您使用的是 Windows,并且git config帮助页面确实提到了

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

如“ git 用 CRLF 替换 LF ”中所述,它应该只发生在结帐 (而不是提交)时,使用core.autocrlf=true.

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

正如回答中提到的,该警告与以下内容相同:

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

git-for-windows/git问题 1242中所述:

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

注意:Git 2.19(2018 年 9 月),当使用 时core.autocrlf虚假的“LF 将被 CRLF 替换”警告现在被抑制


正如正确评论的那样,如果提交时有转换,则LF只有。

该特定警告“ LF will be replaced byCRLF”来自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 年第二季度),代码清理增加了一些解释。

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

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

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

请参阅Anthony Sottile ( ) 的提交
6cb0912
(2018
年 6 月 4 日。(由Junio C Hamano 合并 –
--8063ff9
提交中
,2018
年 6 月 28 日)asottile
gitster

2022-07-30