我设置了一些git filters,以便在提交之前预处理某些文件(在我的IPython笔记本中)。更准确地说,我遵循以下指示: https://stackoverflow.com/a/20844506/578770
如果我提交更改或者使用命令行“git diff”查看更改,这样可以正常过滤文件。
但是,如果我使用meld查看我的更改,则不会过滤文件。 我尝试了几种方法来将meld设置为git的diff工具:
但是我找到的使用meld作为diff工具的解决方案都没有一个能让我在应用git过滤器后查看文件的变化。
有人知道如何实现这个目标吗?
答案 0 :(得分:1)
这是针对此问题的黑客解决方案。您引用的原始git过滤器已经形式化为包nbstripout
(pip3 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