66

其他 帖子中可以看出,Git 的行尾标准化有其优点和缺点。我有一个特定的仅限 Windows 的项目,我认为最好的办法是完全禁用行尾标准化。也就是说,我想保留所有换行符(其中大部分是CRLF),而不是让 git 将它们标准化为LF-only 在幕后,并且我希望该更改影响所有机器上存储库的所有克隆。问题是最有效的方法。

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

4

1 回答 1

113

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

* -text

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

* -crlf

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

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

  1. gitattributes 文档(git help attributes在线副本),它详细描述了行尾标准化的工作原理以及不同属性的特定效果。(可能最相关的是textcrlfdiffmergebinary。)
  2. Git邮件列表线程“文本”属性是否用于指定行尾规范化行为,还是具有更广泛的含义?(2012 年 3 月 30 日),它扩展了不同属性的含义,并澄清这-text并不意味着简单地“这是一个二进制文件”。
于 2012-04-04T19:00:04.243 回答