在 git 提交期间清理输出并格式化 Jupyter 笔记本文件

Raf*_*rja 7 git bitbucket githooks jupyter-notebook

我正在编写 git hook,它可以使用nbstripout自动清理 Jupyter Notebook 输出文件(您可以将其视为源文件格式化程序)。

这是必要的,因为笔记本输出可能会泄露不得提交的机密信息。这些要删除的部分基本上是 JSON 文件中的节点。

我尝试了不同的钩子,但预提交选项主要用于检查文件是否格式化,并且似乎不适合迭代已提交的文件并执行类似的命令nbstripout

一个额外的好处是有一个钩子,可以保留原始工作区文件,同时仅在远程存储库上格式化提交的文件(我什至不知道由于潜在的冲突,这是否可能)。

bk2*_*204 13

您正在寻找的是污迹/清洁过滤器。通过这种方式,您可以让 Git 在签入的版本(干净版本)和工作树中的版本(污迹版本)之间自动转换文件。

在您的情况下,您希望将污迹过滤器设置为cat(因为您不想进行更改)并将清洁过滤器设置为nbstripout,假设您可以将其用作过滤器(从标准输入到标准输出)。

这将使 Git 自动对添加的任何文件进行操作,而根本不需要编写钩子。请注意,您需要在选择使用此存储库的每个系统上设置过滤器配置。

为此,您需要.gitattributes在存储库中设置文件以使用该过滤器处理文件:

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

然后设置您的过滤器设置:

$ git config filter.jupyter.clean nbstripout
$ git config filter.jupyter.smudge cat
Run Code Online (Sandbox Code Playgroud)

然后运行git add --renormalize .并提交。过滤器不会修改您的工作区文件,除非您正在签出包含已修改文件的分支,在这种情况下,您将在存储库中获得版本(因为涂抹过滤器是cat)。