从命令行覆盖 .gitattributes

9

有没有办法在git中临时覆盖属性,类似于-c可以用来覆盖配置选项的方式?

我想使用特定的自定义textconv命令调用git diff,而不是我通常使用的那个。

为了更具体地说明:我的实际用例是在vim中使用jupytext.vim插件编辑Jupyter笔记本。

我的正常~/.gitconfig包含:

[diff "jupyternotebook"]
    command = git-nbdiffdriver diff

在编程方面,您需要设置nbdime作为差异驱动程序,然后在~/.gitattributes中:

*.ipynb diff=jupyternotebook

现在我想要有
[diff "jupytext"]
    textconv = jupytext --from=ipynb --to=md -o - <

在git配置中添加

(或类似内容),并使git diff表现得像

*.ipynb diff=jupytext

这个在.gitattributes里。

如果通过命令行选项传递,我可以考虑将 [diff "jupytext"] 部分永久添加到我的 ~/.gitconfig。但是,使用“jupytext”驱动程序而不是默认的“jupyternotebook”必须是临时的。

或者,我可以使用一个命令行选项来强制 git diff 使用另一个 ~/.gitattributes 文件,该文件优先于所有其他 .gitattributes 文件(例如在同一目录中)。

最终,这个命令行选项旨在进入 vim-gitgutterg:gitgutter_diff_args 设置。我想强制插件以与我通常希望使用 nbdime 转换 *.ipynb 文件不同的方式进行转换。


1
我可能会漏掉一些东西,但为什么不直接覆盖 diff.jupyternotebook.command 配置呢? - jthill
1
git -c diff.jupytext.command='jupytext --from=ipynb --to=md -o - <' diff 这个怎么样? - ElpieKay
我必须将其表达为“命令”而不是“textconv”,所以有点棘手,但我想它可能会起作用。没有办法通过命令行禁用配置选项,对吧?我仍然对一般方法覆盖.gitattributes设置感兴趣。 - Michael Goerz
1个回答

3
我曾经遇到过类似的情况,想要按运行而不是按文件扩展名开关textconv过滤器。(有时我想检查是否存在任何不仅仅是从一个值到另一个值的数值变化的更改。)我找到的诀窍是创建一个“默认”情况,始终使用cat作为文本转换,并且可以使用-c重新分配。
在我的~/.config/git/attributes中,我有:
* diff=default

在我的~/.gitconfig文件中,我有:
[diff "default"]
      textconv = cat
[diff "cat"]
      textconv = cat
[diff "nonums"]
      textconv = "f(){ gsed -E 's/[0-9]+/##/g'  \"$1\" ; }; f"

除了这个别名外,我还可以通过调用git diff-nonums 来临时覆盖默认情况。(该别名允许使用git diff允许的任何参数。)
[alias]
    diff-nonums = !git -c diff.default.textconv=\"`git config diff.nonums.textconv`\" diff

针对您的情况,我认为您应该使用difftool而不是diff的command配置来切换实际命令。nbdime文档显示他们提供了一个脚本来编写所需的配置(git-nbdifftool config --enable [--global]),然后可以使用git difftool --tool=nbdime。完成这些步骤后,我相信您可以设置默认+别名技巧来切换工具和文本转换器,以满足nbdiff或jupytext的需要。
(请参见man gitattributes,向下几段文字,了解属性文件可能保存的位置。请注意,我不清楚commandexternaldifftool之间的区别。例如,我没有找到一个简单的方法来让external或command使用git自身。)
编辑 我从这个问题中看到,git主要是让你选择使用textconv还是外部命令,而不是混合/链接(不幸的是)。也就是说,在man gitconfig的部分称为“选择textconv与外部diff”。链接的问题提供了使用临时文件的解决方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接