真的有必要有这个文件吗?
是的,对于与Git相关的任何设置(如eol、diff、merge filters、content filters等),您希望任何合作者都遵循存储库。
这与git config不同,后者出于安全原因仍然是本地的(因为它可能包含敏感信息或危险指令)。
.gitattributes是您版本化的源代码的一部分,并有助于建立共同的Git标准。
例如,我总是放置(如
VonC/gitcred/.gitattributes
):
*.bat text eol=crlf
*.go text eol=lf
因为无论你的IDE/编辑器如何配置,我需要CRLF来正确运行我的Windows批处理脚本,而我更喜欢在Windows或Linux上编辑的Go文件使用LF。我一直认为像core.autocrlf这样的本地设置是一个反模式,最好将其设置为false。
但是.gitattributes可以声明许多其他的Git元素:
.gitattributes
文件并非“强制性”的,但它是Git工具箱中一个非常有用的工具,可以在项目代码库中安全地共享使用。
而且你甚至可以在
裸仓库中阅读它:
从Git 2.43(2023年第四季度)开始,属性子系统学会了尊重
attr.tree
配置,该配置指定了从哪个树中读取
.gitattributes
文件。
查看
提交 9f9c40c,
提交 2386535(2023年10月13日)由
John Cai(john-cai
)。
(由Junio C Hamano -- gitster
--合并于提交 26dd307,2023年10月30日)
attr
:在裸仓库中从 HEAD 读取属性
Signed-off-by: John Cai
44451a2(attr: teach,2023-05-06,Git v2.41.0-rc1 --
merge)(attr: teach "--attr-source=" global option to "git",2023-05-06)的动机是为了使得在裸仓库中能够使用
gitattributes
更加方便。
然而,为了在裸仓库中更容易阅读
gitattributes
,我们将
HEAD:.gitattributes
设为默认值。
这与mailmap的工作方式一致,
8c473ce("
mailmap
: default mailmap.blob in bare repositories",2012-12-13,Git v1.8.2-rc0 --
merge)。
而且,仍然使用Git 2.43(2023年第四季度):
请参见
提交9f9c40c,
提交2386535(2023年10月13日),由
John Cai(john-cai
)提交。
(由Junio C Hamano -- gitster
--在提交26dd307中合并,2023年10月30日)
attr
:添加
attr.tree
以设置从中读取属性的树状结构
签名:John Cai
44451a2 (attr: teach, 2023-05-06, Git v2.41.0-rc1 --
merge) (attr: teach "--attr-source=" global option to "
git
", 2023-05-06) 提供了将树状物作为属性源的能力。然而,在像GitLab这样作为裸仓库提供Git存储库的上下文中,通过设置一次即可将
--attr-source
指向HEAD,这样做会更容易。
添加一个名为
attr.tree
的新配置项,以实现此功能。
git config
现在在其man page中包含以下内容:
attr.tree
一个指向仓库中的树对象的引用,用于读取属性,而不是工作树中的.gitattributes
文件。
在一个裸仓库中,默认为HEAD:.gitattributes
。
如果该值无法解析为有效的树对象,则使用空树代替。
当使用GIT_ATTR_SOURCE
环境变量或--attr-source
命令行选项时,此配置变量无效。
.gitattributes
,以便Git干扰文件。 - torekdiff
属性,它允许做一些有用的事情,比如查看代码库中特定函数的历史记录。 - philb