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

正如人们可以从 其他 职位上收集的一样,Git的行尾标准化有其优点和缺点。 我有一个特定于Windows的项目,我认为最好的做法是完全禁用行结束标准化。 也就是说,我想保留所有换行符(大多数是CRLF ),而不是让git将它们标准化为LF ,并且只在后台执行,我希望这种改变影响到所有机器上所有存储库的克隆。 问题是最有效的方法。

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

避免在每台机器上分别设置core.autocrlf的最好办法似乎是将一个.gitattributes文件检查到包含单行

 * -text 

或者,如果你有一个老版本的Git的话

 * -crlf 

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

欲了解更多详情,我build议这些资源:

  1. gitattributes文档( git help attributes或在线副本 ),详细描述了行尾标准化的工作原理以及不同属性的特殊效果。 (可能最相关的是textcrlfdiffmergebinary 。)
  2. Git邮件列表线程是“文本”属性只是为了指定行结束标准化的行为,还是它有更广泛的影响? (2012年3月30日),其中扩展了不同属性的含义,并阐明了 – -text并不仅仅意味着“这是一个二进制文件”。