41

我们在 .gitattributes 文件中有这个:

* text=auto eol=lf

我想准确了解这是做什么的。

第一部分是text=auto。从文档中:

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

重要的部分是 Git 只对它检测为文本文件的文件进行规范化。

但是,我不确定这eol=lf部分。我认为它也只会对文本文件进行规范化,但我在文档中找不到对它的支持,并且我们有一个实例,当我们的 PNG 文件也被规范化时,使它们无效。

是否有像上面这样的设置,基本上会说“对文本文件进行双向规范化,而不是二进制文件”?

4

2 回答 2

34

Git 2.10 修复了这个问题,现在可以正常运行。

于 2016-12-05T14:52:29.170 回答
17

答案是否定的,Git 目前(从 2.3 开始)无法通过自动检测二进制和文本格式进行结帐 EOL 转换,因此它只处理文本。解决方法是eol=lf仅指定选定的文件类型(例如,*.txt),或者相反,使用例如*.png binary)将某些文件类型标记为二进制文件。

相关:Git 邮件列表上的功能提案


* text=auto

这将正确规范repo 中的文本文件。然而,第二部分(LF 强制结帐)今天不容易实现,因为eol=lf不幸的是添加也会处理二进制文件。今天唯一的解决方案是将某些类型标记为转换(例如, *.txt eol=lf),或者相反,将某些类型标记为二进制(例如, *.png binary)。

两者都存在相同的问题:特定的文件类型必须在.gitattributes文件中明确列出,这意味着要么必须提前知道类型,要么所有开发人员都必须记住.gitattributes每次出现新文件类型时都更新文件该项目。他们不会。

于 2015-04-08T07:41:25.060 回答