环境:
当我git commit,它说:
git commit
warning: LF will be replaced by CRLF.
这个警告尾巴是向后的吗? 我在 Windows 中编辑文件,行尾是CRLF,就像这张图片: 并且 git 将其更改为LF以提交 repo。 所以我认为正确的警告是:
CRLF
LF
warning: CRLF will be replaced by LF.
警告:LF 将被 CRLF 取代。
根据您使用的编辑器,带有 LF 的文本文件不必使用 CRLF 保存:最近的编辑器可以 保留 eol 样式。但是那个 git config 设置坚持要改变那些......
只需确保:
git config --global core.autocrlf false
这样,您可以避免任何自动转换,并且仍然可以通过.gitattributes文件和core.eol指令指定它们。
.gitattributes
core.eol
windows git “LF 将被 CRLF 替换”
这个警告尾巴是向后的吗?
否:您使用的是 Windows,并且git config帮助页面确实提到了
git config
如果您希望CRLF在工作目录中有行尾,即使存储库没有规范化的行尾,也可以使用此设置。
如“ git 用 CRLF 替换 LF ”中所述,它应该只发生在结帐 (而不是提交)时,使用core.autocrlf=true.
core.autocrlf=true
repo / \ crlf->lf lf->crlf / \
正如回答中提到的,该警告与以下内容相同:
警告:(如果您将其签出/或使用当前core.autocrlf配置克隆到另一个文件夹,)LF 将被替换为 CRLF 该文件将在您的(当前)工作目录中具有其原始行结尾。
core.autocrlf
如git-for-windows/git问题 1242中所述:
git-for-windows/git
file.json我仍然觉得这条消息令人困惑,可以扩展该消息以包含对该问题的更好解释,例如:“删除文件并再次检出后,LF 将被 CRLF 替换”。
file.json
注意:Git 2.19(2018 年 9 月),当使用 时core.autocrlf, 虚假的“LF 将被 CRLF 替换”警告现在被抑制 。
正如正确评论的那样,如果提交时有转换,则LF只有。
该特定警告“ LF will be replaced byCRLF”来自convert.c#check_safe_crlf():
LF will be replaced byCRLF
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()。
convert.c#crlf_to_git()
convert.c#convert_to_git()
convert.c#renormalize_buffer()
最后一个renormalize_buffer()仅由 调用merge- recursive.c#blob_unchanged()。
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
tboegi
gitster
convert_to_git(): safe_crlf/checksafe 变成 int conv_flags 调用 时convert_to_git(),该checksafe参数定义了如果 EOL 转换 ( CRLF --> LF --> CRLF) 不干净地往返应该发生什么。 此外,它还定义了行尾是否应该重新规范化 ( CRLF --> LF) 或保持原样。 checksafe 是safe_crlf具有以下值的枚举:
调用 时convert_to_git(),该checksafe参数定义了如果 EOL 转换 ( CRLF --> LF --> CRLF) 不干净地往返应该发生什么。 此外,它还定义了行尾是否应该重新规范化 ( CRLF --> LF) 或保持原样。
convert_to_git()
checksafe
CRLF --> LF --> CRLF
CRLF --> LF
checksafe 是safe_crlf具有以下值的枚举:
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了.
safe_crlf/checksafe
int conv_flags
autocrlf
safecrlf=false
请参阅Anthony Sottile ( ) 的提交 6cb0912(2018 年 6 月 4 日)。(由Junio C Hamano 合并 – --在8063ff9 提交中,2018 年 6 月 28 日)asottile gitster
asottile