>我发现了一个很棒的 Git 函数,它将解压缩一个文件并使用 diff 中的未压缩结果,使用 .gitattributes,加上对本地存储库配置或全局 git 配置的更改。这就是 Simulink *.slx 文件的方式 - 它们基本上是 zip 压缩的 XML 文件(可能带有其他一些添加的内容)。
但是,这需要我向需要此更新的每个存储库添加一个 .gitattributes - 它是配置。
需要的特定更改是:
-
将以下行添加到
.gitattributes
:*.slx diff = slx
-
将以下行添加到本地存储库配置(一种方法:
git config -e
):[diff "slx"] textconv = unzip -c -a
问题:有没有办法通过全局配置文件或其他方法将相同的函数全局应用于任何存储库?
目标是,如果我在本地设置全局函数,Git 将知道解压缩任何存储库中的任何 *.slx 文件。
编辑:正如LightCC发现的那样,您应该能够将它们放在您的家庭.git/config/attributes
或通过core.attributesFile
设置的其他文件中。 请注意,任何现有的.gitattributes
条目都可以覆盖core.attributesFile
中的任何设置。 竞争条目的优先级是那些"靠近"文件的条目会覆盖那些"远离"文件的条目。 例如,如果目录的.gitattributes
显示*.ext a=b
,这将覆盖顶部工作树目录.gitattributes
设置*.ext a=c
,这将覆盖core.attributesFile
*.ext a=d
。
简短的回答是否定的:您可以使用例如
git config --global -e
在您的(个人的,全局的).gitconfig
中定义diff textconv过滤器。 但是,您必须具有每个存储库的.gitattributes
。
值得补充的是,这种在.gitattributes
中定义属性(必须按存储库)但为它们定义驱动程序的想法——无论是用于 diff 的 textconv 驱动程序、用于git merge
的合并驱动程序,还是用于签入/签出的过滤器驱动程序——至少在我看来有点破碎。 问题是.gitattributes
文件会自动复制到git clone
,但驱动程序不会。
有一个基本的安全问题会阻止 Git 在克隆上复制驱动程序,因此这是合理的。 但这显然不是一个好情况。 请注意,git-lfs 通过自动更新每个存储库的配置来绕过它;您可以通过运行自己的命令来使用相同的解决方案,而不是git
,它调用 Git,同时也对您的配置大惊小怪。