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

标签 git jupyter-notebook bitbucket githooks

我正在编写 git 钩子(Hook),它使用 nbstripout 自动清理 Jupyter Notebook 输出文件(您可以将其视为源文件格式化程序)。
这是必需的,因为笔记本输出可能会泄露不得提交的 secret 信息。这些要被剥离的部分基本上是 JSON 文件中的节点。
我尝试了不同的钩子(Hook),但 pre-commit 选项主要用于 check if files are formatted , 并且似乎不适合遍历已提交的文件并执行像 nbstripout 这样的命令.
一个好处是保留原始工作区文件的钩子(Hook),同时仅在远程存储库上格式化提交的文件(由于潜在的冲突,我什至不知道这是否可能)。

最佳答案

您正在寻找的是一个涂抹/清洁过滤器。这是一种让 Git 自动在 checkin 的版本(干净版本)和工作树中的版本(污点版本)之间转换文件的方法。

在您的情况下,您需要将污迹过滤器设置为 cat (因为你不想做出改变)和你的干净过滤器到nbstripout ,假设您可以将其用作过滤器(从标准输入到标准输出)。

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

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

*.ipynb filter=jupyter

然后设置您的过滤器设置:
$ git config filter.jupyter.clean nbstripout
$ git config filter.jupyter.smudge cat

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

关于git - 在 git 提交期间清理输出和格式化 Jupyter 笔记本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57100070/

相关文章:

python - 更新 Anaconda 中的统计模型

python - 形状摘要图上的颜色图栏未正确显示

git - 如何查找 Bitbucket 帐户 UUID?

OpenShift 3 : unable to clone a private BitBucket repository

linux - Yocto poky构建在函数do_rootfs上失败

git 只推送一个文件到 Heroku

git - 将 git 目录从一个支持 LFS 的仓库移动到另一个(也是 LFS)

python-3.x - 无法导入 Pandas 分析

version-control - 如何从 Bitbucket 上的 Mercurial 书签创建拉取请求?

git - 是否可以检测站点是否正在使用版本控制系统