如何在所有克隆/机器上禁用Git end-of-line(CRLF to LF)?

时间:2012-03-29 20:27:52

标签: git newline gitattributes core.autocrlf

正如人们可以收集from other posts一样,Git的行尾标准化有其优点和缺点。我有一个特定的Windows项目,我认为最好的办法是完全禁用行尾规范化。也就是说,我想保留所有换行符(大部分都是CRLF),而不是让git将它们规范化为LF - 仅在幕后,我希望这些更改能够影响所有克隆所有机器上的存储库。问题是最有效的方法。

大多数关于Git行尾规范化的讨论都是core.autocrlf,我可以通过设置core.autocrlf=false来实现我的目标。但是,这是一个git-config设置,我相信必须在每台机器上分别设置它。如果为true,那么这似乎很容易出错,特别是因为msysgit安装程序会将其引导到设置core.autocrlf=true

1 个答案:

答案 0 :(得分:107)

避免必须在每台计算机上单独设置core.autocrlf的最佳方法似乎是将.gitattributes文件检入包含单行的存储库

* -text

或者,如果您有旧版本的Git,那么

* -crlf

这告诉Git,对于所有路径(因此*),不应尝试行尾规范化。据我所知,这不应该有任何其他副作用。特别是,它不应该改变差异的生成方式(这有单独的属性diff / -diff)或如何处理合并(这有一个单独的属性merge / -merge )。

有关详细信息,我建议使用以下资源:

  1. gitattributes文档(git help attributesan online copy),详细描述了行尾标准化的工作原理以及不同属性的特定效果。 (可能最相关的是textcrlfdiffmergebinary。)
  2. Git邮件列表线程Is the "text" attribute meant only to specify end-of-line normalization behavior, or does it have broader implications?(2012年3月30日),它扩展了不同属性的含义,并阐明-text并不仅仅意味着“这是一个二进制文件”。