使用 meld 作为 diff 工具时查看 git 过滤器输出
Viewing git filters output when using meld as a diff tool
我设置了一些 git filters 以便在提交某些文件(在我的例子中是 IPython 笔记本)之前对其进行预处理。更确切地说,我正在遵循这些说明:
这工作正常,如果我提交更改或使用命令行查看更改,文件会被正确过滤 "git diff "。
但是,如果我使用 meld 查看我的更改,则不会过滤文件。
我尝试了几种方法来将 meld 设置为 git:
的 diff 工具
- 通过调用 git difftool
- 通过从 a custom script
调用 meld
但是我找到的 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
我设置了一些 git filters 以便在提交某些文件(在我的例子中是 IPython 笔记本)之前对其进行预处理。更确切地说,我正在遵循这些说明:
这工作正常,如果我提交更改或使用命令行查看更改,文件会被正确过滤 "git diff "。
但是,如果我使用 meld 查看我的更改,则不会过滤文件。 我尝试了几种方法来将 meld 设置为 git:
的 diff 工具- 通过调用 git difftool
- 通过从 a custom script 调用 meld
但是我找到的 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