有没有办法临时覆盖git中的属性,就像使用-c覆盖配置选项一样?
我想使用一个特定的自定义textconv命令调用git diff,而不是我通常使用的命令。
更具体地说:我的实际用例是使用jupytext.vim plugin在vim中编辑Jupyter笔记本。
我的普通~/.gitconfig包含
[diff "jupyternotebook"]
command = git-nbdiffdriver diff这会将nbdime设置为diff驱动程序,然后在~/.gitattributes中
*.ipynb diff=jupyternotebook现在我想要
[diff "jupytext"]
textconv = jupytext --from=ipynb --to=md -o - <(或类似的东西),并让git diff表现为
*.ipynb diff=jupytext是在.gitattributes。
我愿意将[diff "jupytext"]部分永久添加到我的~/.gitconfig中。但是,根据传递给git diff的命令行选项,使用"jupytext“驱动程序而不是默认的"jupyternotebook”必须是临时的。
或者,我可以使用git diff的命令行选项,强制它使用一个优先于所有其他.gitattributes文件的不同的.gitattributes文件(例如,在同一目录中)。
最终,命令行选项用于vim-gitgutter的g:gitgutter_diff_args设置。我想强制插件以不同于我通常希望用nbdime转换它们的方式来转换*.ipynb文件。
发布于 2021-06-05 00:47:32
我有一个类似的例子,我想在每次运行时打开和关闭一个textconv过滤器,而不是按文件扩展名。(我希望有时能够检查是否有任何更改,而不仅仅是从一个值到另一个值的数字更改。)我发现的诀窍是创建一个“默认”案例,它总是被使用,使用cat作为文本case,然后我可以用-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配置来切换实际的命令。The nbdime docs显示,他们提供了一个脚本来编写所需的配置(git-nbdifftool config --enable [--global],然后可以使用git difftool --tool=nbdime)完成了这一点,我相信你可以设置default+alias技巧来切换工具和textconv来做你需要的nbdiff或jupytext。
(有关保存属性文件的位置,请参阅下面几段中的man gitattributes。注意,我不清楚command、external和difftool之间的区别。例如,我刚才没有找到一种简单的方法来获取外部或命令来使用git本身。)
编辑我从this question上看到,git很大程度上是让你在文本转换和外部命令之间做出选择,而不是混合/链(不幸的是)。也就是说,man gitconfig中的部分被称为“选择文本diff与外部差异”。链接的问题建议解决临时文件的问题。
https://stackoverflow.com/questions/54068308
复制相似问题