我建议根本不要使用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
这就是有点丑陋的方法。