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

4
我设置了一些git过滤器,以便在提交之前预处理某些文件(在我的情况下是IPython笔记本)。更确切地说,我正在按照这些说明操作: https://dev59.com/GOo6XIcBkEYKwwoYLhXh#20844506 如果我提交更改或使用命令行“git diff”查看更改,则可以正常工作并正确过滤文件。
但是,如果我使用meld查看我的更改,则文件不会被过滤。我尝试了几种方法来设置meld作为git的diff工具: 但是,我找到的所有使用meld作为diff工具的解决方案都不能使我在应用git过滤器后查看文件的更改。
有人知道如何实现这一点吗?
1个回答

1
这是一个针对该问题的hack解决方案。你提到的原始git过滤器已经被规范化为包nbstripoutpip3 install nbstripout),但你可以将任何过滤器放入此脚本中,它将起同样的作用。我假设你想为用户配置而不是特定的repo。
~/.gitconfig中,添加一个名为git-nb-clean-diff的新diff driver:
[diff "git-nb-clean-diff"]
    command = git-nb-clean-diff

~/.config/git/attributes中,配置笔记本使用该diff驱动程序进行差异比较:
*.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

感谢您的帮助,使用git-driver是解决方案!关于笔记本过滤器,我开始使用nbdime包(http://nbdime.readthedocs.io)代替nbstripout。它提供了一个浏览器界面,用于将笔记本与图片进行差异比较。 - F-A
不客气!您是否也在使用nbdime的输出过滤功能,还是仍然存储输出? - user126350
我现在正在存储/提交输出。这样,我仍然可以在所有设备上看到相同的图表,但我不会有丑陋的差异。 - F-A
嗨,在提出另一个问题之前,我想知道这个过程是否仍然适用于最新的nbstripout和meld。我无法使其工作,但我也保留了一些nbstripout的默认配置,例如 [filter "nbstripout"] clean = \"/home/me/anaconda3/bin/python3.8\" -m nbstripout smudge = cat [diff "ipynb"] textconv = \"/home/me/anaconda3/bin/python3.8\" -m nbstripout -t 和一个属性文件 *.ipynb filter=nbstripout *.ipynb diff=ipynb. - giammi56

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接