core.safecrlf
如果您只需要警告而不是致命错误,则可能需要设置为“警告”。
来自“ git config
”管理页面:
核心.safecrlf
如果为真,当行尾转换处于活动状态时,让 git 检查转换 CRLF 是否可逆。Git 将验证命令是否直接或间接修改了工作树中的文件。
例如,提交一个文件然后签出同一个文件应该会在工作树中产生原始文件。如果 core.autocrlf 的当前设置不是这种情况,git 将拒绝该文件。
该变量可以设置为“警告”,在这种情况下,git 只会警告不可逆的转换,但会继续操作。
CRLF 转换可能会损坏数据。
启用后,git 将在提交期间将 CRLF 转换为 LF,在签出期间将 LF 转换为 CRLF。
git 无法重新创建在提交之前包含 LF 和 CRLF 混合的文件。
对于文本文件,这是正确的做法:它更正了行尾,以便我们在存储库中只有 LF 行尾。
但对于意外归类为文本的二进制文件,转换可能会损坏数据。
如果您及早发现这种损坏,您可以通过在.gitattributes
.
提交后,您的工作树中仍然有原始文件,并且该文件尚未损坏。你可以明确告诉 git 这个文件是二进制文件,git 会适当地处理这个文件。
不幸的是,无法区分清理具有混合行结尾的文本文件的预期效果和损坏二进制文件的不良效果。
在这两种情况下,CRLF 都会以不可逆的方式被移除。对于文本文件,这是正确的做法,因为 CRLF 是行尾,而对于二进制文件,转换 CRLF 会破坏数据。
我更喜欢确定我想.gitattributes
仅使用文件(使用core.eol
您拥有的设置)强制 eol 的确切文件或文件类型,并将其保留autocrlf
为 false。
例如,对于具有混合 eol 的文本字段,此博客文章建议:
如果您的计算机中安装了 Notepad++,只需按照以下步骤操作。
- 打开有致命问题的文件。
- 单击
Edit -> EOL Conversion
然后选择 Windows 格式或任何您遇到问题的提交。
警告,如果您有 Git 2.17 或 2.18:在 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