Git忽略ipynb时pre-commit的jupytext钩子无法同步生成py文件问题
问题核心原因
你当前的钩子无法正常工作主要来自两个配置冲突:
- pre-commit默认仅对Git暂存/已跟踪的文件运行钩子,你将
*.ipynb加入了.gitignore,Git不会识别、暂存这类文件,钩子的files规则匹配不到有效触发文件,自然不会执行同步逻辑 - 原有jupytext参数仅支持对已存在配对关系的文件执行同步,没有预先配置配对规则的前提下,无法从单独的ipynb生成对应的py文件
具体调整方案
1. 修正pre-commit钩子配置
给本地jupytext钩子增加强制运行参数,取消对Git暂存文件的依赖,调整后的完整配置如下:
- repo: local hooks: - id: jupytext name: jupytext entry: jupytext language: conda files: '^notebooks/(.*\.py|.*\.ipynb)$' args: [--sync, --pipe, black, --set-formats, 'ipynb,py'] pass_filenames: false always_run: true
新增参数说明:
always_run: true:每次提交强制触发该钩子,不需要匹配到暂存的符合规则的文件pass_filenames: false:不向jupytext传递Git暂存的文件列表,避免因为没有暂存ipynb导致执行失败--set-formats ipynb,py:自动给处理的notebook配置同目录下ipynb和py文件的配对规则,不需要手动提前设置
2. 修正.gitignore规则
确保同步生成的py文件可以被Git跟踪,在你的.gitignore中补充以下规则:
!notebooks/**/*.py
这个规则会取消对notebooks目录下所有py文件的忽略,保证同步生成的脚本可以正常提交。
3. 可选:添加全局jupytext配置(更稳定)
如果项目内notebook比较多,可以在项目根目录新建.jupytext.toml配置文件,统一配置配对规则,不需要在钩子参数里重复指定:
[formats] "notebooks/" = "ipynb,py"
配置后可以把钩子args里的--set-formats, 'ipynb,py'删掉即可。
验证方式
配置调整完成后,先执行一次pre-commit run --all-files手动触发钩子,检查对应ipynb同级目录是否生成了同名的py文件,确认无误后再正常提交即可。
内容的提问来源于stack exchange,提问作者Farhood ET
相关产品推荐
相关产品推荐

