5

我设置了一些git 过滤器,以便在提交某些文件(在我的情况下为 IPython Notebooks)之前对其进行预处理。更准确地说,我遵循以下说明: https ://stackoverflow.com/a/20844506/578770

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

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

但是我发现使用 meld 作为差异工具的解决方案都没有使我能够在应用 git 过滤器后查看文件的更改。

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

4

1 回答 1

1

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

~/.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
于 2017-05-10T14:57:38.667 回答