.gitattributes 中的“* text=auto eol=lf”和“* text eol=lf”有什么区别?

Sem*_*mel 3 git gitattributes

这与这个问题非常相似: What is the Difference between `* text=auto` and `* text eol=lf` in .gitattributes?

但我特别问为什么我应该使用* text=auto eol=lfover* text eol=lf或反之亦然?

根据我的理解,eol覆盖text设置,那么使用前者有什么意义呢?有区别吗?如果是这样 - 怎么办?

我现在正在阅读很多网站和 Stack Overflow 问题/答案 - 但我仍然完全困惑。特别是当我看到这个变化时:https://github.com/git/git/blob/master/Documentation/RelNotes/2.10.0.txt#L248

我发现更改的措辞很难读懂,以至于我现在仍然不明白。有人可以解释一下吗?

tor*_*rek 10

Git 中有代码来检测文件是文本还是二进制。

\n\n

如果文件的前面有很多零 (ASCII NUL) 字节,则该文件被视为二进制文件。对于其他一些二进制模式也是如此。

\n\n

git diff默认情况下,Git 使用此代码来决定在检测到某些文件中的某些更改时是否显示差异。git format-patch如果文件看起来是二进制的,Git 会说“二进制文件不同”(默认情况下\xe2\x80\x94 ,例如,你可以让它打印可用的差异,并强制执行该行为)。否则,该文件将显示为文本,因此您将获得常规差异。

\n\n

Git将此代码用于text=autoin .gitattributes,但用于text-without- =auto。所以:

\n\n
* text=auto eol=<whatever>\n
Run Code Online (Sandbox Code Playgroud)\n\n

告诉 Git:每次将文件从索引提取到工作树时,都将检测代码应用于该文件。如果检测代码声称该文件是文本文件,请应用行尾转换,同时将文件的冻干副本从索引重新水化为工作树中的可用形式。如果检测代码声称该文件是二进制文件,请不要理会它。1

\n\n

相比之下,* text eol=<whatever>告诉 Git:每次将文件重新水合到工作树中时,应用行尾转换。 2.10 版本之前的 Git 中的错误是* text=auto意外地* text* text=auto.

\n\n
\n\n

1由于文本检测有时\xe2\x80\x94(尽管并非经常\xe2\x80\x94)在(例如)图像文件上失败,.jpg因此依赖text=auto. 但大多数时候它都有效。

\n