这与以下问题非常相似: What is the differrence between `* text=auto` and `* text eol=lf` in .gitattributes?
但是我特别问为什么我应该在string
上使用* text=auto eol=lf
,反之亦然?
据我了解,* text eol=lf
会覆盖eol
设置,那么使用前者有什么意义呢?有区别吗?如果是这样-怎么办?
我现在正在阅读许多网站和Stack Overflow问题/答案-但我仍然非常困惑。特别是当我看到此更改时:https://github.com/git/git/blob/master/Documentation/RelNotes/2.10.0.txt#L248
我很难理解更改的措辞,以至于我现在都不是更明智的选择。有人可以对此有所说明吗?
答案 0 :(得分:1)
Git中有代码可以检测文件是文本文件还是二进制文件。
如果文件的前面有很多零(ASCII NUL)字节,则该文件被视为二进制文件。其他一些二进制模式也是如此。
默认情况下,当git diff
检测到某个文件中的某些更改时,Git使用此代码来决定是否显示差异。如果该文件看起来是二进制文件,则Git会说“二进制文件不同”(默认情况下,您可以使它显示可用的差异,例如git format-patch
会强制执行该行为)。否则,该文件似乎是文本文件,因此您需要定期添加差异。
Git 还将此代码用于text=auto
中的.gitattributes
,但 not 则用于text
-无-{{1} }。所以:
=auto
告诉Git:每次将文件从索引提取到工作树时,都将检测代码应用于文件。如果检测代码声称该文件是文本文件,则在将文件的冻干副本从索引重新水化为工作树中的可用形式时,应用行末转换。如果检测代码声称该文件是二进制文件,则将其保留。 1
相反,* text=auto eol=<whatever>
告诉Git:每次将文件补水到工作树中时,都要应用行尾转换。 2.10版之前的Git中的错误是{ {1}}偶然是* text eol=<whatever>
而不是* text=auto
的意思。
1 由于文本检测有时(尽管不是很经常)在(例如)* text
个图像文件上失灵,因此依赖 * text=auto
。但这在大多数时间都是有效的。