使用.gitattributes强制LF行结尾而不会丢失自动文本/二进制推理?

Rom*_*kov 13 git newline

我想用eol=LF我的.gitattributes文件,但我想它适用于仅将文件的Git自动确定为文本文件.

我能找到的最好的方法是将特定的文件扩展名/ globs定义为文本或二进制文件.这并不理想,因为列表可能很大.我试过了* text=auto eol=LF,但eol=LF部件似乎覆盖了auto部分.

我可以在不需要特定git config设置的情况下强制LF行结尾,并且不会丢失自动文本/二进制推断吗?

Lar*_*ars 5

更新: @romkyns评论后我重新检查了一切,发现我的解决方案略有不正确.正确的是一个.gitattributes带有以下内容的文件:

* text=auto
Run Code Online (Sandbox Code Playgroud)

根据文档,这确保了Git认为是文本的所有文件都将在存储库中具有规范化(LF)行结尾.


原答案:

你想要写在你的.gitattributes内容就像这样简单:

* text=auto
* text eol=lf
Run Code Online (Sandbox Code Playgroud)

第一行告诉git自动检测文件类型(二进制文本或文本,这是git的默认行为,因此可以省略),第二行用LF结尾处理所有检测到的文本文件(并且只有那些)的行结尾.

我用一些混合二进制内容和一些CRLF结束的文本文件测试了这个设置,并获得了预期的转换为LF结尾.

  • 我认为这不是完整的答案。`* text=auto` 仍然会在 Linux 上将文件结尾转换为 Windows 上的 CRLF。问题是如何强制“eol=LF”,这意味着在 Windows 上也应该以 LF 文件结尾检查文件。 (5认同)
  • 为什么第二行不把所有内容都变成“文本”?我很惊讶它没有,[文档](http://git-scm.com/docs/gitattributes)使它看起来像“*文本”部分_“将路径标记为文本文件”_。另外,我希望它覆盖任何 git 配置设置,即使我像你建议的那样省略第一行,也会发生这种情况吗? (2认同)