数据科学家爱用的工具jupyter笔记本默认不支持git,但现在人工智能研究组织fast.ai开发了一个名为nbdev2的工具,解决了jupyter和git无法并用的问题。nbdev2提供一系列hook,自动解决git冲突,在标准的jupyter环境就能直接使用。
科学家、工程师,甚至是学生和老师,皆会使用jupyter作为探索资料、程序代码以及编写程序的互动式工具,而且jupyter也能够将结果存成仪表板、书籍甚至是博客,方便分享重复使用。但在jupyter中却没办法使用git异步协作方法,原因在于jupyter笔记本所使用的json格式,和git冲突标记默认采用的纯文本格式不兼容,因此jupyter没办法打开git冲突标记文件。
fast.ai提到,冲突在jupyter笔记本经常见,因为jupyter在用户每次执行笔记本的时候,都会变更非常多的资料,包括协作用户如果以不同顺序执行jupyter中的单元格,则每一个指示单元格执行顺序的序数都会因变更而发生冲突,过去这件事需要人工耗费大量时间手动修正。
不只如此,用户在每次执行笔记本的时候,图片或是文本叙述的id都会不停的改变,再加上部分的输出是随着时间变化,或是每个用户所使用环境的元数据也都不同,由于这些笔记本文件大量的变更,导致笔记本在进行git diffs比对版本差异时非常耗时,不只在程序代码审查变得麻烦,也会让git存储库容量变得庞大。
由于上述这些问题,使得jupyter用户在笔记本协作上遭遇挫折,官方提到,过去在并用jupyter和git主要遇到两类问题,分别是git冲突导致笔记本损毁,以及元数据和输出所造成不必要的冲突。
而fast.ai利用jupyter和git所提供的扩展机制,开发了nbdev2来完全自动解决jupyter加git所会遇到的问题。nbdev2是一个开源基于jupyter的开发平台,其包含一个新的git整合驱动程序,能够提供笔记本原生冲突标记,即便存在git冲突,笔记本也可以直接在jupyter中打开,另外,jupyter的新存储hook能够自动删除所有不必要的元数据和不确定的单元格输出。
经过fast.ai内部的试用,他们提到,nbdev2新工具已经完全改变组织内部协作流程,而且过去jupyter加git所遭遇到的问题也都获得解决,协作者甚至能够在同一个单元格中更改程序代码,现在于jupyter修复冲突变得非常主动方便。