是否有任何方法可以临时覆盖git中的属性,类似于可以使用-c
覆盖配置选项吗?
我想使用特定的自定义git diff
命令调用textconv
,该命令不同于我通常使用的命令。
更具体地讲:我的实际用例是使用jupytext.vim
plugin在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
中。但是,根据传递给git diff
的命令行选项,使用临时驱动程序而不是默认的“ jupyternotebook”必须是临时的。
或者,我可以使用git diff
的命令行选项来强制它使用优先于所有其他~/.gitattributes
文件的其他.gitattributes
文件(例如,在同一目录)。
最终,命令行选项旨在进入vim-gitgutter
的g:gitgutter_diff_args
设置。我想强制插件转换* .ipynb文件的方式与通常用nbdime
转换文件的方式不同。
答案 0 :(得分:0)
我有一个类似的案例,我想在每次运行时打开和关闭 textconv
过滤器,而不是按文件扩展名。 (我希望有时能够检查是否有任何更改,而不仅仅是从一个值到另一个值的数字更改。)我发现的技巧是创建一个始终使用的“默认”案例,使用 {{1}用于 textconv,然后我可以用 -c 重新分配。
在我的 cat
中,我有:
~/.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
对于您的情况,我认为您希望使用 difftool 而不是 diff 的 [alias]
diff-nonums = !git -c diff.default.textconv=\"`git config diff.nonums.textconv`\" diff
配置来切换实际命令。 The nbdime docs 表明他们提供了一个脚本来编写所需的配置(command
,然后可以使用 git-nbdifftool config --enable [--global]
) 这样做之后,我相信您可以设置默认+别名技巧来切换两者工具和 textconv 来完成您对 nbdiff 或 jupytext 的需求。
(有关可以保存属性文件的位置,请参阅 git difftool --tool=nbdime
后面的几段。注意,我不清楚 man gitattributes
、command
和 { {1}}。例如,我刚才没有找到一个简单的方法来获取外部或命令来使用 git 本身。)
edit 我从 this question 看到 git 主要是想让你在 textconv 和外部命令之间进行选择,而不是 mix/chain(不幸的是)。即,external
中的部分称为“选择 textconv 与外部差异”。链接的问题建议使用临时文件的解决方法。