如果您只想收到警告而不是致命错误,您可能希望将core.safecrlf
设置为"warn"。
来自"git config
"管理页面:
core.safecrlf
如果设置为true,则使Git在启用换行符转换时检查是否可逆转换CRLF。 Git将验证命令是否直接或间接地修改了工作树中的文件。
例如,提交一个文件,然后检出相同的文件应该在工作树中产生原始文件。
如果对于core.autocrlf的当前设置不是这种情况,则git将拒绝该文件。
该变量可以设置为“warn”,这种情况下,git只会警告不可逆转换,但会继续操作。
CRLF转换有损数据的轻微风险。
启用它后,git会在提交期间将CRLF转换为LF,并在检出期间将LF转换为CRLF。
在提交之前包含LF和CRLF混合的文件无法通过git重新创建。
对于文本文件,这是正确的做法:它纠正了行尾以使我们在存储库中只有LF行尾。
但是对于意外分类为文本的二进制文件,转换可能会损坏数据。
如果您及早识别到这种损坏,可以通过在
.gitattributes
中显式设置转换类型来轻松修复它。
在提交后,您仍然拥有原始文件,并且此文件尚未损坏。 您可以明确告诉git此文件是二进制文件,git将适当处理该文件。
不幸的是,清理混合行结尾文本文件的期望效果和破坏二进制文件的不良效果无法区分。
在这两种情况下,都以不可逆转换方式删除CRLFs。 对于文本文件,这是正确的做法,因为CRLFs是行结尾符,而对于二进制文件,转换CRLFs会破坏数据。
我更喜欢只使用.gitattributes
文件(具有您所拥有的core.eol
设置)来确定我想要强制执行eol的确切文件或文件类型,并将autocrlf
设置为false。
如果出现混合eol的文本文件,博客文章建议采取以下步骤:
如果您的计算机上安装了Notepad ++,请按照以下步骤操作。
- 打开出现致命问题的文件。
- 单击
编辑 -> EOL转换
,然后选择Windows格式或您在提交时遇到问题的任何格式。
警告,如果您使用的是Git 2.17或2.18:在Git 2.17周期中引入的回归(“8462ff4”)(“convert_to_git()
: safe_crlf/checksafe
becomes int conv_flags
”,2018-01-13,Git 2.17.0)导致autocrlf
重写会产生一个警告信息,尽管设置了safecrlf=false
。
查看 commit 6cb0912 (2018年6月4日) 由 Anthony Sottile (asottile
) 提交。
(合并自 Junio C Hamano -- gitster
-- 在 commit 8063ff9 中,2018年6月28日)
.gitattributes
" 文件中的一行样本会是什么?正是我拥有的内容吗?所以我的.gitattributes
文件是否会正确转换? - Pure.Kromecore.autocrl
设置为false,则可以使用core.eol
控制eol转换,因此,是的,您的.gitattributes
文件看起来很好,您只需要测试它/完善它以覆盖您实际想要转换的文件即可。 - VonC