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



这与这个问题非常相似: .gitattributes 中的 '* text=auto' 和 '* text eol=lf' 有什么区别?

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

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

我现在正在阅读很多网站和堆栈溢出问题/答案 - 但我仍然完全困惑。尤其是当我看到这种变化时:https://github.com/git/git/blob/master/Documentation/RelNotes/2.10.0.txt#L248

我发现更改的措辞很难阅读,以至于我现在并不明智。有人可以对此有所了解吗?

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

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

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

Git使用此代码进行.gitattributes中的text=auto,但不用于text- 没有-=auto。 所以:

* text=auto eol=<whatever>

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

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


1由于文本检测有时会(尽管不是那么频繁)在(例如).jpg图像文件上(例如)失火,因此依赖text=auto是不明智的。 但它大部分时间都有效。

相关内容

  • 没有找到相关文章

最新更新