“* text=auto”和“* text=auto eol=lf”有什么区别?
What is the difference between "* text=auto" and "* text=auto eol=lf"?
我正在阅读有关 .gitattributes
文件和强制以 some tutorials it's written like * text=auto
and in some others 结尾的规则,就像文件第一行的 * text=auto eol=lf
。
有什么区别吗?第一个到底是做什么的?它甚至会强制任何行结尾吗?
some repositories 中还提到 * text=auto
预制 LF 归一化!不知道是不是真的
这些属性之间存在差异。 text
要求 Git 执行行尾转换。任何时候 Git 这样做,它都会将 LF 结尾存储在存储库中,并且当它在工作树中签出文件时会转换它们。 text=auto
要求 Git 在文件的开头搜索一个 NUL 字节,如果找到一个,则该文件是二进制文件并且不执行转换;否则,文件为文本,并执行转换。这在大多数情况下通常都可以正常工作,并且是一个合理的默认设置。
默认情况下,Git 遵循几个配置变量来决定工作树中应使用哪种行结束转换(LF 或 CRLF),除非 eol
属性已设置。如果设置了 eol
,则 (a) 文件会自动设置为 text
并且 (b) 始终使用该行结尾。
所以在前一种情况下,* text=auto
说,“猜猜这是否是一个文本文件,如果是,请使用用户首选的行结尾来检查这个文件。”从 Git 2.10 开始,eol=lf
仅适用于在这种情况下被猜测为 text
的文件。通常,如果 text
被显式设置,text=auto
被设置并且文件被检测为文本,或者如果 text
未指定,则 eol
适用;在 Git 2.10 及更新版本中,它不会影响明确标记为 -text
或使用 text=auto
.
检测为二进制的文件
但是,如果您使用的是旧版本的 Git,这可能会导致一些二进制文件被错误处理,因为它会强制它们始终为文本。如果您的存储库仅包含文本文件,那么它可以工作,但最好写成 * text eol=lf
。否则,您可以分别指定不同类型的文件:
* text=auto
*.c text
*.jpg -text
*.sh text eol=lf
*.bat text eol=crlf
以上将 shell 文件设置为 LF,因为它们是工作所必需的,对于具有 CRLF 结尾的批处理文件也是如此。 JPEG 文件不会有任何转换,因为它们是二进制文件。
我正在阅读有关 .gitattributes
文件和强制以 some tutorials it's written like * text=auto
and in some others 结尾的规则,就像文件第一行的 * text=auto eol=lf
。
有什么区别吗?第一个到底是做什么的?它甚至会强制任何行结尾吗?
some repositories 中还提到 * text=auto
预制 LF 归一化!不知道是不是真的
这些属性之间存在差异。 text
要求 Git 执行行尾转换。任何时候 Git 这样做,它都会将 LF 结尾存储在存储库中,并且当它在工作树中签出文件时会转换它们。 text=auto
要求 Git 在文件的开头搜索一个 NUL 字节,如果找到一个,则该文件是二进制文件并且不执行转换;否则,文件为文本,并执行转换。这在大多数情况下通常都可以正常工作,并且是一个合理的默认设置。
默认情况下,Git 遵循几个配置变量来决定工作树中应使用哪种行结束转换(LF 或 CRLF),除非 eol
属性已设置。如果设置了 eol
,则 (a) 文件会自动设置为 text
并且 (b) 始终使用该行结尾。
所以在前一种情况下,* text=auto
说,“猜猜这是否是一个文本文件,如果是,请使用用户首选的行结尾来检查这个文件。”从 Git 2.10 开始,eol=lf
仅适用于在这种情况下被猜测为 text
的文件。通常,如果 text
被显式设置,text=auto
被设置并且文件被检测为文本,或者如果 text
未指定,则 eol
适用;在 Git 2.10 及更新版本中,它不会影响明确标记为 -text
或使用 text=auto
.
但是,如果您使用的是旧版本的 Git,这可能会导致一些二进制文件被错误处理,因为它会强制它们始终为文本。如果您的存储库仅包含文本文件,那么它可以工作,但最好写成 * text eol=lf
。否则,您可以分别指定不同类型的文件:
* text=auto
*.c text
*.jpg -text
*.sh text eol=lf
*.bat text eol=crlf
以上将 shell 文件设置为 LF,因为它们是工作所必需的,对于具有 CRLF 结尾的批处理文件也是如此。 JPEG 文件不会有任何转换,因为它们是二进制文件。