有没有一种全球方法来应用.gitattributes?

时间:2019-06-05 17:48:38

标签: git simulink binaryfiles gitattributes

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

但是,这需要我向需要此更新的每个存储库添加.gitattributes-并且是配置。

所需的特定更改是:

  1. 将以下行添加到.gitattributes

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

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

问题:是否可以通过全局配置文件或其他方法将相同功能全局应用于所有存储库?

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

1 个答案:

答案 0 :(得分:4)

编辑:作为LightCC found,您应该可以将它们放在您的家.git/config/attributes或通过core.attributesFile设置的其他文件中。请注意,任何现有的.gitattributes条目都可以覆盖core.attributesFile中的任何设置。竞争条目的优先级是那些“更接近”文件的条目会覆盖那些“更远离”文件的条目。例如,如果目录的.gitattributes表示*.ext a=b,则它将覆盖.gitattributes的顶部工作树目录*.ext a=c的设置,该设置将覆盖core.attributesFile {{1} }。

简短的答案是“否”:您可以使用*.ext a=d在您的(个人,全球性).gitconfig中定义diff textconv过滤器。但是,每个存储库必须有一个git config --global -e

值得补充的是,这种在.gitattributes中定义属性的想法(必须是每个存储库),但是要为它们定义驱动程序-无论它们是diff的textconv驱动程序,还是{{1 }},或用于签入/签出的筛选器驱动程序-至少在我看来有点破损。问题是.gitattributes文件会自动复制到git merge上,但驱动程序不会。

存在一个基本的安全问题,该问题阻止Git将驱动程序复制到克隆上,因此 是合理的。但这显然不是一个好情况。请注意,通过自动更新每个存储库配置来解决它;您可以通过运行自己的命令(而不是.gitattributes)来使用相同的解决方案,该命令可以调用Git,同时还可以简化配置。