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

时间:2015-05-19 15:16:11

标签: git filter diff meld

我设置了一些git filters,以便在提交之前预处理某些文件(在我的IPython笔记本中)。更准确地说,我遵循以下指示: https://stackoverflow.com/a/20844506/578770

如果我提交更改或者使用命令行“git diff”查看更改,这样可以正常过滤文件。

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

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

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

1 个答案:

答案 0 :(得分:1)

这是针对此问题的黑客解决方案。您引用的原始git过滤器已经形式化为包nbstripoutpip3 install nbstripout),但您可以将任何过滤器放入此脚本中,它也可以正常工作。我假设您要为用户而不是特定的仓库配置它。

~/.gitconfig中,添加名为git-nb-clean-diff的新差异驱动程序:

[diff "git-nb-clean-diff"]
    command = git-nb-clean-diff

~/.config/git/attributes中,配置要使用该差异驱动程序进行区分的笔记本:

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

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

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

最后,我们将此文件设为可执行文件

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

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

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