在 git 次提交期间清理输出并格式化 Jupyter 笔记本文件
Sanitizing output and formatting Jupyter notebooks files during git commits
我打算编写 git 挂钩,它使用 nbstripout 自动清理 Jupyter Notebook 输出文件(您可以将其视为源文件格式化程序)。
这是必需的,因为笔记本输出可能会泄露绝不能承诺的机密信息。这些要被剥离的部分基本上是JSON文件中的节点。
我尝试了不同的钩子,但预提交选项主要用于 check if files are formatted,似乎不适合迭代已提交的文件并执行像 nbstripout
这样的命令。
一个额外的好处是一个挂钩,它保留了原始工作区文件,同时只在远程仓库上格式化提交的文件(由于潜在的冲突,我什至不知道这是否可能)。
您要查找的是 smudge/clean 过滤器。通过这种方式,您可以 Git 在签入的版本(干净版本)和工作树中的版本(污迹版本)之间自动转换文件。
在您的情况下,您希望将涂抹过滤器设置为 cat
(因为您不想进行更改)并将清洁过滤器设置为 nbstripout
,假设您可以将其用作过滤器(从标准输入到标准输出)。
这将使 Git 自动对添加的任何文件进行操作,根本不需要编写挂钩。请注意,您需要在您选择使用此存储库的每个系统上设置过滤器配置。
为此,您需要在存储库中设置 .gitattributes
文件以使用该过滤器处理文件:
*.ipynb filter=jupyter
然后设置您的过滤器设置:
$ git config filter.jupyter.clean nbstripout
$ git config filter.jupyter.smudge cat
然后 运行 git add --renormalize .
并提交。该过滤器不会修改您的工作区文件,除非您检出包含已修改文件的分支,在这种情况下,您将获得存储库中的版本(因为污迹过滤器是 cat
)。
我打算编写 git 挂钩,它使用 nbstripout 自动清理 Jupyter Notebook 输出文件(您可以将其视为源文件格式化程序)。
这是必需的,因为笔记本输出可能会泄露绝不能承诺的机密信息。这些要被剥离的部分基本上是JSON文件中的节点。
我尝试了不同的钩子,但预提交选项主要用于 check if files are formatted,似乎不适合迭代已提交的文件并执行像 nbstripout
这样的命令。
一个额外的好处是一个挂钩,它保留了原始工作区文件,同时只在远程仓库上格式化提交的文件(由于潜在的冲突,我什至不知道这是否可能)。
您要查找的是 smudge/clean 过滤器。通过这种方式,您可以 Git 在签入的版本(干净版本)和工作树中的版本(污迹版本)之间自动转换文件。
在您的情况下,您希望将涂抹过滤器设置为 cat
(因为您不想进行更改)并将清洁过滤器设置为 nbstripout
,假设您可以将其用作过滤器(从标准输入到标准输出)。
这将使 Git 自动对添加的任何文件进行操作,根本不需要编写挂钩。请注意,您需要在您选择使用此存储库的每个系统上设置过滤器配置。
为此,您需要在存储库中设置 .gitattributes
文件以使用该过滤器处理文件:
*.ipynb filter=jupyter
然后设置您的过滤器设置:
$ git config filter.jupyter.clean nbstripout
$ git config filter.jupyter.smudge cat
然后 运行 git add --renormalize .
并提交。该过滤器不会修改您的工作区文件,除非您检出包含已修改文件的分支,在这种情况下,您将获得存储库中的版本(因为污迹过滤器是 cat
)。