Windows上的Git清理过滤器python脚本

Jul*_*rec 5 python git git-filter

我试图添加一个git clean-filter以便忽略我的IPython Notebook文件的输出和execution_count。

我基本上已经关注了这篇文章(基于SO的回答),并根据我的需要对其进行了一些修改。另外,我在Windows上,据我所知,不需要使python脚本可执行的部分(请参阅Python FAQ)。

我想将其捆绑到我的存储库中,以便其他贡献者也可以使用它。我已经ipynb_drop_output.py在存储库的根目录中保存了,并在同一位置保存了gitconfig和gitattributes文件,因此在根目录下,我有:

.gitignore
.gitconfig
.gitattributes
ipynb_drop_output.py
MyNotebook.ipynb
Run Code Online (Sandbox Code Playgroud)

.gitattributes

*.ipynb filter=clean_ipynb
Run Code Online (Sandbox Code Playgroud)

.gitconfig

[filter "clean_ipynb"]
    clean = ipynb_drop_output.py
    smudge = cat
Run Code Online (Sandbox Code Playgroud)

我已经手动测试了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上运行它?

sta*_*son 3

假设您已在以下位置签出存储库:~/myrepo/

您需要告诉 git 在哪里可以找到.gitconfig您希望所有用户使用的存储库范围内的自定义。您可以通过运行以下命令来做到这一点:

cd ~/myrepo/
git config --local include.path ../.gitconfig
Run Code Online (Sandbox Code Playgroud)

note ../,您在尝试执行此操作时缺少它,因为.gitconfig.git/config不在同一目录中。您的布局~/myrepo/将有:

.git/config
.gitconfig
.gitattributes
Run Code Online (Sandbox Code Playgroud)

您将需要提交到您的存储库的最后 2 个文件。

所有用户都必须git config在克隆您的存储库后立即执行上面的命令,以告诉 git 信任~/myrepo/.gitconfig。出于安全原因,无法代表他们执行此操作。

最后,你的手动错误配置之所以默默地失败,是因为 git 是这样设计的,以允许可选的配置文件。因此,在撰写本文时,如果.git/config您有:

[include]
    path = ../.gitconfig
Run Code Online (Sandbox Code Playgroud)

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

这方面有了新的进展,但目前还没有定论。希望将来能有一种方法来诊断此类 git 问题。