1

试图处理一个项目,但我无法提交,因为一些 Linter 正在使用中。它会引发如下错误:

预期换行符为“LF”,但发现“CRLF”

我尝试按照如何强制 git 在 windows 下使用 LF 而不是 CR+LF 中的说明进行操作?

git config --global core.eol lf

乃至

git rm --cached -rf .
git diff --cached --name-only -z | xargs -n 50 -0 git add -f

Linter 阻止我取得任何进展:

在此处输入图像描述

我想以某种方式遵守 LF 和 CRLF 的规则,但我的尝试失败了。我在过去 30 分钟内尝试了这个,在搜索引擎上搜索并试图找到它。我怎么解决这个问题?

4

1 回答 1

2

我建议根本不要使用core.autocrlf。相反,创建一个.gitattributes文件。在该文件中,eol=lf用作任何应存储在存储库中且仅以 LF 结尾的文件的设置;用作eol=crlf应使用 CRLF 设置存储在存储库中的任何文件的设置。另请参阅VonC对链接问题的接受答案。

同时,您的工作树中的文件将具有您的主机操作系统想要的任何设置。要理解这意味着什么,请记住,在 Git 中,已提交的文件(实际存储在 Git 中的文件)是只读的、压缩的、重复数据删除的,并且通常完全无法使用。您计算机上的其他软件都无法读取或使用它们。因此,必须将它们从 Git 中复制出来,才能将它们变成普通(且可用)的文件。

这意味着您看到和使用的文件根本不在 Git 中。它们刚刚Git 中提取出来,以填充您的工作树。那些普通的、可用的文件可以有你的系统想要的任何行尾。当 Git 为新的提交准备文件时,Git 可以去除原始行尾并放入仅 LF 行尾。

任何试图确定您正在提交的内容是否可以提交的预提交钩子,最好不要查看工作树中的文件,而是查看Git将查看的文件,以放入下一个提交。这些文件将具有您告诉 Git 放入其中的任何行结尾,由.gitattributes文件提供,您可以在其中单独控制每个文件,而不是使用core.autocrlf.

最后,两者都应该工作。您确实需要 Git 2.16 或更高版本才能获得git add --renormalize .(您真的想要拥有它;其他这样做的方法充其量是丑陋的)。只要您在主工作树中,注释中提到的方法knittl 也可以使用 using ;rm .git/index && git reset这就是有点丑陋的方法。

于 2021-03-03T03:56:47.037 回答