gpt4 book ai didi

git - "* text=auto"和 "* text=auto eol=lf"有什么区别?

转载 作者:行者123 更新时间:2023-12-05 02:35:04 26 4
gpt4 key购买 nike

我正在阅读有关 .gitattributes 文件和强制以 some 行结束的规则教程它写成像 * text=autosome others ,它就像文件第一行的 * text=auto eol=lf

有什么区别吗?第一个到底是做什么的?它甚至会强制任何行结尾吗?

也在 some repositories 中提到 * text=auto 执行 LF 规范化!不知道是不是真的。

最佳答案

这些属性之间存在差异。 text 要求 Git 执行行结束转换。每当 Git 执行此操作时,它都会将 LF 结尾存储在存储库中,并在从工作树中 check out 文件时转换它们。 text=auto 要求 Git 在文件的开头搜索一个 NUL 字节,如果找到一个,则该文件是二进制文件并且不执行转换;否则,文件为文本,并执行转换。这在大多数情况下通常都能正常工作,并且是一个合理的默认值。

默认情况下,Git 遵循几个配置变量来决定在工作树中应该使用哪种行结束转换(LF 或 CRLF),除非设置了 eol 属性.如果设置了 eol,则 (a) 文件会自动设置为 text 并且 (b) 始终使用该行结尾。

所以在前一种情况下,* text=auto 表示,“猜测这是否是一个文本文件,如果是,则使用用户首选的行结尾检查此文件。”从 Git 2.10 开始,eol=lf 仅适用于在这种情况下被猜测为 text 的文件。一般来说,如果 text 被显式设置,text=auto 被设置并且文件被检测为文本,或者如果 text 未指定;在 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 文件不会有任何转换,因为它们是二进制文件。

关于git - "* text=auto"和 "* text=auto eol=lf"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70633469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com