Jupyter笔记本默认无法与Git协同工作。借助nbdev2,Jupyter与Git的兼容性问题已得到彻底解决。该工具提供了一套钩子机制,可生成清洁的Git差异对比,自动解决大多数Git冲突,并确保剩余冲突完全可以在标准Jupyter笔记本环境中解决。
Jupyter笔记本是科学家、工程师、技术文档工程师、学生和教师等人的强大工具。它为交互式探索数据和代码、编写程序以及将结果记录为仪表板、书籍或博客提供了理想的笔记本环境。
但当与他人协作时,这种理想环境就会烟消云散。这是因为Git等工具(异步协作最流行的方法)会使笔记本变得无法使用。根本原因在于Jupyter笔记本使用的格式(JSON)与Git冲突标记默认假设的格式(纯文本行)之间存在基本不兼容。
在新发布的nbdev2(基于Jupyter的开源开发平台)中,我们解决了所有问题:
整个实现仅需58行代码!基本思路是首先"撤销"原始Git合并创建的冲突,然后在单元级别(而非行级别)"重做"合并,且仅查看单元源代码(而非输出或元数据)。
Jupyter提供的"预保存"钩子允许在每次保存笔记本时运行代码。nbdev使用此功能设置一个钩子,在保存时移除所有不必要的元数据(包括执行计数)。
在某机构,我们在所有项目中都使用Jupyter。所有测试、文档和模块源代码完全在笔记本中开发(当然使用nbdev!)。我们也为所有库使用Git。某些代码库有数百名贡献者。因此解决Jupyter与Git的兼容性问题对我们至关重要。
nbdev2中的新工具彻底解决了Jupyter与Git的兼容性问题。没有不必要的冲突,单元级合并如魔法般工作,在极少数与协作者修改同一单元源代码的情况下,在Jupyter中修复冲突也变得简单方便。
ReviewNB解决了使用笔记本进行拉取请求的问题。与nbdev使Git合并和提交兼容Jupyter类似,ReviewNB使代码审查兼容Jupyter。
Jupytext以基于行的格式而非JSON保存笔记本。这意味着所有常规Git机制(如合并和拉取请求)都能正常工作。
nbdime项目拥有自己的Git驱动器和过滤器。由于它们与nbdev不完全兼容(部分原因是它们以不同方式解决某些相同问题),使用经验有限。但nbdime的Jupyter扩展有时会被使用,它提供类似于ReviewNB的视图,但用于本地更改而非拉取请求。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。