如何在所有克隆/机器上禁用Git行尾(CRLF到LF)?

wh6knrhe  于 2023-01-15  发布在  Git
关注(0)|答案(1)|浏览(99)

正如我们可以收集到的fromotherposts一样,Git的行尾规范化有其优点和缺点。我有一个特定的Windows项目,我认为最好的做法是完全禁用行尾规范化。(大部分都是CRLF),而不是让git把它们规范化为LF--只在幕后进行,我希望这个修改能影响所有机器上仓库的所有克隆。
大多数关于Git行尾规范化的讨论都是关于core.autocrlf的,我可以通过设置core.autocrlf=false来实现我的目标。然而,这是一个git-config设置,我相信你必须在每台机器上分别设置它。如果是这样,那似乎很容易出错,特别是因为msysgit安装程序会引导你设置core.autocrlf=true

soat7uwm

soat7uwm1#

避免在每台计算机上分别设置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并不意味着简单的“这是一个二进制文件”。

相关问题