Pre-Commit Hooks
如何使用 nbdev 的 Git pre-commit 钩子
我们为 pre-commit 框架 提供了钩子,用于在本地捕获和修复未清理或未导出的 notebook,无需等待持续集成(CI)流水线运行。
如果你使用的 notebook 编辑器(例如 VSCode)尚未支持 Jupyter clean 钩子,它们也可以作为替代方案。
安装 pre-commit
…安装 pre-commit(如果遇到困难,请查阅 他们的最新说明)
pip install pre-commit
conda install -c conda-forge pre-commit
brew install pre-commit
为你的仓库配置 pre-commit
在你的仓库根目录下创建一个名为 .pre-commit-config.yaml
的文件,内容如下:
repos:
- repo: https://github.com/fastai/nbdev
rev: 2.2.10
hooks:
- id: nbdev_clean
- id: nbdev_export
只包含你希望运行的一个或多个钩子,以及任何其他 支持的钩子。
提示
如果你期望所有协作者都使用 pre-commit,请将 .pre-commit-config.yaml
文件添加到你的仓库中。否则,请将其添加到你的 .gitignore
文件中。
将 pre-commit 钩子安装到你的仓库中
pre-commit install
提交并体验 pre-commit 的作用
当你在一个安装了 pre-commit 钩子的仓库中执行 git commit
时,你的新工作流程将如下所示:
- pre-commit 会对你已暂存的更改(即你执行
git add
的更改)运行每个钩子。 - 如果某个钩子修改了文件——例如,如果提交的 notebook 未经清理——pre-commit 会停止提交,并将这些更改保留为*未暂存*状态。
- 你现在可以暂存这些更改,并进行任何必要的编辑以使 pre-commit 通过。
- 重新执行
git commit
,如果成功,你的提交将被创建。
在实际使用中,它并没有听起来那么复杂。了解它是否适合你的最佳方法是亲自尝试一下。
当你遇到困难时如何覆盖 pre-commit
如果你努力尝试让 pre-commit 通过你认为绝对正确的提交,可以像这样 暂时禁用某个钩子:
SKIP=hook git commit
...这里的 hook
指代配置中有效的钩子,例如,禁用 nbdev_export
钩子:
SKIP=nbdev_export git commit
你也可以使用 --no-verify
标志完全禁用 pre-commit:
git commit --no-verify
最后,如果你决定不使用它,可以使用以下命令从你的仓库中完全移除 pre-commit 钩子:
pre-commit uninstall