大多数.gitattributes
文件都有* text=auto
. 该文件的目的是什么text=auto
?
3 回答
从文档:
.gitattributes
(或.git/info/attributes
)文件中的每一行的格式为:
pattern attr1 attr2 ...
所以这里的模式是*
,表示所有文件,属性是text=auto
。
做什么text=auto
?从文档中:
当文本设置为“自动”时,路径被标记为自动行尾标准化。如果 Git 确定内容是文本,则在签入时将其行结尾规范化为 LF。
如果未启用,默认行为是什么?
未指定
如果未指定 text 属性,Git 使用 core.autocrlf 配置变量来确定是否应该转换文件。
做什么core.autocrlf
?从文档:
core.autocrlf
将此变量设置为“true”与在所有文件上将文本属性设置为“auto”几乎相同,除了不保证文本文件被规范化:存储库中包含 CRLF 的文件将不会被触及。如果您希望在工作目录中使用 CRLF 行结尾,即使存储库没有规范化的行结尾,也可以使用此设置。该变量可以设置为输入,在这种情况下不执行输出转换。
如果您认为这一切都像泥巴一样清晰,那么您并不孤单。
这就是* text=auto
我所说的:当有人提交文件时,Git 会猜测该文件是否是文本文件,如果是,它将提交文件的一个版本,其中所有CR + LF 字节都被替换为 LF 字节。它不会直接影响文件在工作树中的外观,还有其他设置可以在签出文件时将 LF 字节转换为 CR + LF 字节。
推荐:
我不建议放入* text=auto
文件.gitattributes
。相反,我会推荐这样的东西:
*.txt text
*.html text
*.css text
*.js text
这明确指定了哪些文件是文本文件,这些文件在对象数据库中将 CRLF 转换为 LF(但不一定在工作树中)。我们有一个带有* text=auto
. 这不是一个有趣的调试。
如果必须使用* text=auto
,请将其作为第一行.gitattributes
,以便后面的行可以覆盖它。这似乎正在成为一种越来越流行的做法。
它确保行尾被标准化。来源:Kernel.org
当文本设置为“自动”时,路径被标记为自动行尾标准化。如果 git 确定内容是文本,则在签入时将其行尾规范化为 LF。
如果您想与强制行尾规范化的源代码管理系统进行互操作,或者您只想规范化存储库中的所有文本文件,则应将所有文件的文本属性设置为“自动”。
这确保了 git 认为是文本的所有文件都将在存储库中具有规范化 (LF) 行结尾。
该配置与如何处理行尾有关。启用后,所有行尾都将转换为存储库中的 LF。还有其他标志来处理如何在工作目录中转换行尾。关于我们这里的问题的完整信息: https ://www.kernel.org/pub/software/scm/git/docs/gitattributes.html