在Windows上Git clean-filter python脚本

Git clean-filter python script on windows

我正在尝试添加一个git clean-filter,以便忽略我的IPython笔记本文件中的输出和execution_count。

我基本上都遵循了这篇文章(基于这个SO答案),并根据我的需要稍作修改。此外,我在Windows上,因此就我所知,不需要关于使python脚本可执行的部分(参见Python FAQ)。

我想将它捆绑到我的存储库,以便其他贡献者也可以获得它。
我已经将ipynb_drop_output.py保存在我的存储库的根目录并将gitconfig和gitattributes文件保存在同一个地方,所以在我拥有的根目录中:

1
2
3
4
5
.gitignore
.gitconfig
.gitattributes
ipynb_drop_output.py
MyNotebook.ipynb

.gitattributes中:

1
*.ipynb filter=clean_ipynb

.gitconfig中:

1
2
3
[filter"clean_ipynb"]
    clean = ipynb_drop_output.py
    smudge = cat

我手动测试了我的ipynb_drop_output的代码,它就像一个魅力。然而git diff仍然显示了execution_count和输出已更改。看起来脚本根本没有运行。

我想它可能是因为clean = ipynb_drop_output.py部分,但我已尝试过各种变体:不包括.py,包括完整路径"C ... ipynb_drop_output.py",也包括正斜杠等。

我的第二个理论是git只是没有查看.gitconfig文件,但我不清楚如何告诉它和/或如何检查它实际上正在查看它。而且我认为git config --file .gitconfig filter.clean_ipynb.clean ipynb_drop_output的目的是做到这一点......

我怎样才能让它在Windows上运行?


假设您在~/myrepo/下签出了您的存储库。

您需要告诉git在哪里找到您希望所有用户都使用的repo-wide自定义.gitconfig。你这样做是通过运行:

1
2
cd ~/myrepo/
git config --local include.path ../.gitconfig

注意../,由于.gitconfig.git/config不在同一目录中,因此尝试进行此操作时缺少../~/myrepo/的布局将具有:

1
2
3
.git/config
.gitconfig
.gitattributes

您将需要提交给您的repo的最后2个文件。

在克隆你的repo后,你的所有用户都必须从上面执行git config命令,告诉git信任~/myrepo/.gitconfig。出于安全原因,不可能代表他们这样做。

最后,手动错误配置失败的原因是因为git是以这种方式设计的,以允许可选的配置文件。因此,在撰写本文时,如果您的.git/config中有:

1
2
[include]
    path = ../.gitconfig

并且../.gitconfig不存在,git会默默地跳过它。因此,如果键入错误的路径,它将跳过它。

在这方面有一个新的发展,陪审团仍然没有。希望将来有一种方法来诊断这样的git问题。