从命令行重写.gittributes

从命令行重写.gittributes,git,vim,diff,gitattributes,Git,Vim,Diff,Gitattributes,是否有任何方法可以临时覆盖git中的属性,类似于如何使用-c覆盖配置选项 我想使用与我通常使用的命令不同的特定自定义textconv命令调用git diff 为了使这更具体:我的实际用例是使用vim编辑Jupyter笔记本 我的普通~/.gitconfig包含 [diff "jupyternotebook"] command = git-nbdiffdriver diff 设置为差异驱动程序,然后在~/.gittributes中: *.ipynb diff=jupyternoteboo

是否有任何方法可以临时覆盖git中的属性,类似于如何使用
-c
覆盖配置选项

我想使用与我通常使用的命令不同的特定自定义
textconv
命令调用
git diff

为了使这更具体:我的实际用例是使用vim编辑Jupyter笔记本

我的普通
~/.gitconfig
包含

[diff "jupyternotebook"]
    command = git-nbdiffdriver diff
设置为差异驱动程序,然后在
~/.gittributes
中:

*.ipynb diff=jupyternotebook
现在我想要一个

[diff "jupytext"]
    textconv = jupytext --from=ipynb --to=md -o - <
在.gittributes中

我愿意将
[diff“jupytext”]
部分永久添加到我的
~/.gitconfig
。但是,根据传递给
git diff
的命令行选项,使用“jupytext”驱动程序而不是默认的“jupyternotebook”必须是临时的

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


最后,命令行选项用于进入的
g:gitgoolt\u diff\u args
设置。我想强制插件转换*.ipynb文件,这与我通常希望使用
nbdime

转换它们的方式不同。我有一个类似的例子,我希望每次运行时打开和关闭
textconv
过滤器,而不是按文件扩展名。(我希望有时能够检查是否有任何变化,而不仅仅是从一个值到另一个值的数字变化。)我发现的诀窍是创建一个“默认”大小写,它总是被使用,对textconv使用
cat
,然后我可以用-c重新分配

在my
~/.config/git/attributes
中,我有:

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

* diff=default
[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
允许的任何参数。)

对于您的情况,我认为您应该使用difftool而不是diff的
命令
配置来切换实际命令。显示他们提供了一个脚本来编写所需的配置(
git-nbdifftool-config--enable[--global]
,然后可以使用
git-difftool--tool=nbdime
)完成后,我相信您可以设置默认+别名技巧来切换工具和textconv,以完成nbdiff或jupytext所需的操作

(请参阅下面几段的
mangittributes
,了解属性文件可能保存的位置。注意,
命令
外部
、和
difftool
。例如,我刚才没有找到一种简单的方法来获取外部或命令来使用git本身。)


edit我从git中看到,它主要是让您在textconv和外部命令之间进行选择,而不是mix/chain(不幸的是)。也就是说,
mangitconfig
中的部分称为“选择textconv与外部差异”。链接的问题提出了一种临时文件的解决方法。

我可能很容易漏掉一些东西,但为什么不直接覆盖
diff.jupyternotebook.command
config?git-c diff.jupytext.command='jupytext--from=ipynb--to=md-o呢?我必须将其表示为
命令,而不是
textconv
,所以这有点棘手,但我想它可以工作。没有办法通过命令行禁用配置选项,对吗?我仍然对覆盖
.gittributes
设置的一般方法感兴趣。