使用 meld 作为 diff 工具时查看 git 过滤器输出

Viewing git filters output when using meld as a diff tool

我设置了一些 git filters 以便在提交某些文件(在我的例子中是 IPython 笔记本)之前对其进行预处理。更确切地说,我正在遵循这些说明:

这工作正常,如果我提交更改或使用命令行查看更改,文件会被正确过滤 "git diff "。

但是,如果我使用 meld 查看我的更改,则不会过滤文件。 我尝试了几种方法来将 meld 设置为 git:

的 diff 工具

但是我找到的 none 的使用 meld 作为 diff 工具的解决方案使我能够在应用 git 过滤器后查看文件的变化。

有人知道如何实现这个吗?

这是针对此问题的黑客解决方案。您所指的原始 git 过滤器已形式化为包 nbstripout (pip3 install nbstripout),但您可以将任何过滤器放入此脚本中,它的工作方式相同。我假设您想为用户而不是特定的存储库配置它。

~/.gitconfig 中,添加一个名为 git-nb-clean-diff:

的新差异驱动程序
[diff "git-nb-clean-diff"]
    command = git-nb-clean-diff

~/.config/git/attributes 中,将笔记本配置为使用该 diff 驱动程序进行 diff:

*.ipynb diff=git-nb-clean-diff

现在我们需要制作真正的 diff 驱动程序!在 ~/bin/git-nb-clean-diff 中(必须有此文件名,但位置是可选的):

#!/bin/bash
# pass the stripped working tree file and the repo copy 
# to meld for diffing
meld <(cat  | nbstripout) 

最后,我们使这个文件可执行

chmod +x ~/bin/git-nb-clean-diff

并将其添加到路径中,以便 git 可以在运行时找到我们的 diff 驱动程序

echo "PATH=$PATH:~/bin" >> ~/.bashrc
# reload the edited .bashrc
source ~/.bashrc