eol = lf与.gitattributes文件中的文本有什么区别?

时间:2015-09-29 22:47:35

标签: git

根据the documentation on .gitattributestext启用了行尾标准化:

  

text

     

在路径上设置text属性可启用行尾标准化,并将路径标记为文本文件。在不猜测内容类型的情况下进行行尾转换。

根据相同的文档,eol=lf也会规范化换行符:

  

eol

     

此属性设置要在工作中使用的特定行结束样式   目录。它可以在没有任何内容检查的情况下实现行尾标准化,   有效地设置文本属性。

给出的示例将它们混合在同一个文件中的事实似乎暗示它们之间存在一些(可能是微妙的)差异:

*.txt       text
*.vcproj    eol=crlf
*.sh        eol=lf
*.jpg       -text

此外,似乎没有任何明确的声明它们是相同的,或者texteol=lf的简写 - 尽管出现就是这种情况。我能在这样的陈述中找到的最接近的东西就是我上面引用的内容,它说的是“有效地设置文本属性”。但是这个词实际上似乎只是稍微后退,好像它不是实际设置文本属性,而只是或多或少设置,或具有几乎相同的效果。

什么,正是,这两者之间的区别是什么? (或者text只是普通用例的简写吗?)你有什么理由将两者混合在一个.gitattributes文件中吗?

OR:text是否要求Git猜测您需要哪种换行符,而eol(显然)指定?

1 个答案:

答案 0 :(得分:2)

eol告诉Git在工作目录中使用哪些行结尾存储库中的那些文件启用LF规范化。此设置适用于特定路径,因此我会在我的示例中使用*.txt

  • *.txt eol=crlf告诉Git(1)在签入时将行结尾标准化为LF,并且(2)在签出文件时将它们转换为CRLF。
  • *.txt eol=lf告诉Git(1)在签入时将行结尾规范化为LF,以及(2)在签出文件时防止转换为CRLF。

请注意,这两个设置都会在签到时将行结尾规范化为LF!这有效地设置了text属性,因为text执行相同的操作。

由于这些设置仅适用于未来的更改,因此需要additional steps来更新已签入的文件。

还有一件事......小心只在匹配文本文件的路径上设置eol。它支持规范化而无需任何内容检查,但二进制文件不应该规范化。根据您的路径,您可能需要明确排除某些文件类型:

# Disable eol normalization for these types:
*.png -text
*.jpg -text
*.ttf -text