Mic*_*erz 6 git vim diff gitattributes
有什么办法可以临时覆盖 git 中的属性,类似于如何-c使用覆盖配置选项?
我想git diff使用与textconv我通常使用的命令不同的特定自定义命令进行调用。
更具体一点:我的实际用例是使用jupytext.vim插件在 vim 中编辑 Jupyter 笔记本。
我的正常~/.gitconfig包含
[diff "jupyternotebook"]
command = git-nbdiffdriver diff
Run Code Online (Sandbox Code Playgroud)
设置nbdime为差异驱动程序,然后在~/.gitattributes:
*.ipynb diff=jupyternotebook
Run Code Online (Sandbox Code Playgroud)
现在我想要
[diff "jupytext"]
textconv = jupytext --from=ipynb --to=md -o - <
Run Code Online (Sandbox Code Playgroud)
(或类似的东西)在 git 配置中,并表现git diff得好像
*.ipynb diff=jupytext
Run Code Online (Sandbox Code Playgroud)
在 .gitattributes 中。
我愿意将该[diff "jupytext"]部分永久添加到我的~/.gitconfig. 但是,根据传递给git diff.
或者,我可以使用命令行选项来git diff强制它使用~/.gitattributes优先于所有其他.gitattributes文件(例如,在同一目录中)的不同文件。
最终,在命令行选项旨在进入g:gitgutter_diff_args的设置vim-gitgutter。我想强制插件以不同的方式转换 *.ipynb 文件,我通常希望使用nbdime.
我有一个类似的情况,我想textconv在每次运行时打开和关闭过滤器,而不是通过文件扩展名。(我希望有时能够检查是否有任何更改,而不仅仅是从一个值到另一个值的数字更改。)我发现的技巧是创建一个“默认”情况,该情况始终用于cattextconv,然后我可以用 -c 重新分配它。
在我的~/.config/git/attributes我有:
* diff=default
Run Code Online (Sandbox Code Playgroud)
在我的~/.gitconfig我有:
[diff "default"]
textconv = cat
[diff "cat"]
textconv = cat
[diff "nonums"]
textconv = "f(){ gsed -E 's/[0-9]+/##/g' \"$1\" ; }; f"
Run Code Online (Sandbox Code Playgroud)
除了这个别名之外,我还可以在需要时通过调用 来临时覆盖默认情况git diff-nonums。(别名允许任何git diff允许的参数。)
[alias]
diff-nonums = !git -c diff.default.textconv=\"`git config diff.nonums.textconv`\" diff
Run Code Online (Sandbox Code Playgroud)
对于您的情况,我认为您需要使用 difftool 而不是 diff 的command配置来切换实际命令。 nbdime 文档显示他们提供了一个脚本来编写所需的配置(git-nbdifftool config --enable [--global]然后可以使用git difftool --tool=nbdime)完成此操作后,我相信您可以设置 default+alias 技巧来切换工具和 textconv 来执行 nbdiff 所需的操作或 jupytext。
(请参阅man gitattributes下面的几段,了解可以保存属性文件的位置。注意,我不清楚command、external和之间的区别difftool。例如,我现在没有找到获取外部或命令的简单方法使用 git 本身。)
编辑我从这个问题中看到,git很大程度上想让你在textconv和外部命令之间进行选择,而不是混合/链(不幸的是)。即,中的部分man gitconfig称为“选择 textconv 与外部 diff”。链接的问题建议使用临时文件的解决方法。
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |