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

Chr*_*ris 64 git newline gitattributes core.autocrlf

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

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

Chr*_*ris 109

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

* -text
Run Code Online (Sandbox Code Playgroud)

或者,如果你有一个旧版本的Git那么

* -crlf
Run Code Online (Sandbox Code Playgroud)

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

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

  1. gitattributes文档(git help attributes在线副本),详细描述了行尾规范化的工作原理以及不同属性的特定效果.(可能是最相关的是text,crlf,diff,merge,和binary).
  2. Git邮件列表线程"text"属性用于指定行尾规范化行为,还是具有更广泛的含义?(2012年3月30日),它扩展了不同属性的含义,并澄清这-text并不仅仅意味着"这是一个二进制文件".

  • 使用`core.autocrlf=true`(默认),Git 不会在结账时修改行尾吗?哪个是*之前*它甚至可以读取`.gitattributes`?(`.gitattributes` 本身会有 CRLF)。然后,在提交时,Git 被告知不要转换 CRLF(`-text`),所以你最终在你的仓库中得到了 CRLF? (2认同)
  • @MichelJung git 可以在从远程存储库拉取后但在检出文件之前从本地存储库读取“.gitattributes”。本地存储库的行结尾应与远程存储库相匹配。仅在检出文件并将其提交回时,才会执行行结束转换。 (2认同)