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

时间:2014-09-27 14:41:42

标签: git newline

我想在我的.gitattributes文件中使用eol=LF,但我希望将应用于Git自动确定为文本文件的文件。

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

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

3 个答案:

答案 0 :(得分:5)

更新:在@romkyns发表评论后我重新检查了所有内容,发现我的解决方案略有不正确。正确的是.gitattributes - 文件,其中包含以下内容:

* text=auto

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

原始答案:

您想在.gitattributes中写下的内容就像这样简单:

* text=auto
* text eol=lf

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

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

答案 1 :(得分:3)

我建议三种解决方案:

方法1
我假设您的大多数工作目录文件都是文本文件。因此,为每种文本文件类型添加特定行会浪费大量时间。

unset text个文件中的binary个文件可以.gitattributes属性。由于只有少数binary文件类型,所以这样做并不乏味。

方法2
我认为您关键的问题是禁用全局eol=lf设置。根据{{​​1}}优先顺序,您可以在.gitattributes中配置具有最高优先级的text=auto。同时,它只影响工作树。

方法3 完全从工作树中删除$GIT_DIR/info/attributes。依靠文件编辑器进行行尾转换。我建议使用Notepad ++,这对于Unix风格和Windows风格的EOL转换非常方便。

答案 2 :(得分:0)

Repositery level git属性: (Where should I place my global 'gitattributes' file?

- 在其中创建一个.git / info / attributes文件: * text = auto

- 对于每个修改过的文件,在执行git add *时,现在应该收到警告 “该文件将在您的工作目录中包含其原始行结尾”