是否有全局方式来应用 .gitattributes?

Is there a global way to apply .gitattributes?

我发现了一个很棒的 Git 函数,它将解压一个文件并使用 .git 属性在 diff 中使用未压缩的结果,加上对本地 repo 配置或全局 git 配置。这就是 Simulink *.slx 文件的样子 - 它们基本上是 zip 压缩的 XML 文件(可能还有一些其他添加的东西)。

但是,这需要我为每个需要此更新的存储库添加一个 .git 属性 - 这是配置。

需要进行的特定更改是:

  1. 将以下行添加到 .gitattributes:

    *.slx diff = slx
    
  2. 将以下行添加到本地 repo 配置(一种方法:git config -e):

    [diff "slx"]
        textconv = unzip -c -a
    

问题:有没有办法通过全局配置文件或其他方法将相同的功能全局应用于任何 repo?

目标是如果我在本地设置全局函数,Git 将知道解压缩任何 repo 中的任何 *.slx 文件。

编辑: 作为 ,您应该可以将这些放在您的家中 .git/config/attributes 或您通过 [= 设置的其他文件中11=]。请注意,任何现有 .gitattributes 条目都可以覆盖 core.attributesFile 中的任何设置。竞争条目的优先级是那些 "closer to" 文件覆盖那些 "further away from" 文件。例如,如果目录的 .gitattributes 表示 *.ext a=b,这会覆盖顶部 work-tree 目录 .gitattributes 设置 *.ext a=c,它会覆盖 core.attributesFile *.ext a=d.

简短的回答是否定的:您可以在您的(个人,global-to-you).gitconfig 中使用 git config --global -e 定义 diff textconv 过滤器。但是,您必须有 .gitattributes per-repository.

值得补充的是,这种在 .gitattributes(必须是 per-repository)中定义属性但为它们定义驱动程序的想法——无论它们是 diff 的 textconv 驱动程序,合并驱动程序git merge 或 checkin/checkout 的过滤器驱动程序 — 至少在我看来有点破损。问题是 .gitattributes 文件在 git clone 上自动复制,但驱动程序不会。

存在阻止 Git 在克隆上复制驱动程序的基本安全问题,因此 合理的。但这显然不是一个好情况。请注意, 通过自动更新 per-repository 配置来绕过它;您可以通过 运行 您自己的命令来使用相同类型的解决方案,而不是 git,它会调用 Git,同时还会对您的配置大惊小怪。