我发现了一个很棒的 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 found ,您应该能够将它们放入您的 home .git/config/attributes
或通过 core.attributesFile
设置的其他文件中。请注意,任何现有的 .gitattributes 条目都可以覆盖 core.attributesFile 中的任何设置。竞争条目的优先级是那些“靠近”文件的条目优先于那些“远离”文件的条目。例如,如果目录的 .gitattributes
为 *.ext a=b
,则这会覆盖顶级工作树目录 .gitattributes
设置 *.ext a=c
,它覆盖 core.attributesFile
*.ext a=d
。
简短的答案是否定的:您可以使用例如 git config 在您的(个人的、全局的)
。但是,每个存储库必须有一个 .gitconfig
中定义 diff textconv 过滤器 --全局-e.gitattributes
。
值得补充的是,在 .gitattributes
中定义属性(必须是每个存储库),但为它们定义驱动程序 - 无论它们是用于 diff、 merge 驱动程序的 textconv 驱动程序对于 git merge 或用于 checkin / checkout 的过滤器驱动程序,至少在我看来有点损坏。问题是 .gitattributes
文件会在 git clone
上自动复制,但驱动程序不会。
存在一个基本的安全问题,阻止 Git 在克隆上复制驱动程序,因此这是合理的。但这显然不是一个很好的情况。请注意git-lfs通过自动更新每个存储库的配置来解决这个问题;您可以通过运行自己的命令(而不是 git
)来使用相同类型的解决方案,该命令会调用 Git,同时还会对您的配置进行大惊小怪。
关于git - 是否有应用 .gitattributes 的全局方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56465606/