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

问题描述 投票:1回答:1

我想编写git钩子,该钩子使用nbstripout自动清除Jupyter Notebook输出的文件(您可以将其视为源文件格式工具)。

这是必需的,因为笔记本计算机的输出可以披露不得提交的机密信息。这些要剥离的部分基本上是JSON文件中的节点。

我尝试了不同的钩子,但是pre-commit选项主要用于check if files are formatted,似乎不适合迭代已提交的文件并执行类似nbstripout的命令。

奖励是保留原始工作区文件,而仅在远程仓库上格式化提交的文件的挂钩(我什至不知道由于潜在的冲突,这样做是否可能)。

git jupyter-notebook bitbucket githooks
1个回答
0
投票

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

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

这将使Git在添加的所有文件上自动运行,而根本不需要编写钩子。请注意,您需要在选择用于此仓库的每个系统上设置过滤器配置。

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

*.ipynb filter=jupyter

然后设置过滤器设置:

$ git config filter.jupyter.clean nbstripout
$ git config filter.jupyter.smudge cat

然后运行git add --renormalize .并提交。除非您签出包含已修改文件的分支,否则该过滤器不会修改您的工作空间文件,在这种情况下,您将在存储库中获取版本(因为污迹过滤器为cat)。

© www.soinside.com 2019 - 2024. All rights reserved.