![](/img/trans.png)
[英]Is there a way to integrate git with Jupyter and have a version control over the notebooks created?
[英]Version control of Mathematica notebooks
Mathematica笔记本当然是纯文本文件 - 期望他们应该使用版本控制系统(在我的情况下是git,虽然我怀疑特定系统很重要)似乎是合理的。 但事实是任何.nb文件都充满了缓存信息,时间戳和其他各种元数据。 它的一团糟。
这意味着可以进行有限的版本控制 - 提交和回滚工作正常。 但是,合并是一场灾难 。 Mathematica不会打开包含合并标记的文件,文本编辑器无法通过.nb文件。
有没有人有运气将笔记本置于版本控制之下? 怎么样?
建议禁用文件大纲缓存,这是您使用文本编辑器查看笔记本时所指的元数据。 正如您所发现的,如果多方正在编辑同一个笔记本,它可能会导致合并冲突。
使用Option Inspector可以轻松禁用此功能。 在Mathematica菜单中,转到格式 → 选项检查器... ,在左上角设置范围下拉到Selected Notebook并在搜索字段中搜索FileOutlineCache
。 将选项设置为False并保存您的笔记本,您应该全部设置。
请注意,这可能会使打开笔记本电脑变慢,但除非笔记本电脑相当大,否则您可能不会注意到差异。
关于如何使用Git在Mathematica Stack Exchange上使用Mathematica进行版本控制,有一套很好的建议。 简而言之,理念是尽量减少.nb笔记本的使用,并尝试使用.m软件包进行大部分版本控制(类似于xuhdev和MMA用户所说的)。 考虑到笔记本电脑的管理方式,这似乎很明智。
完全不是解决你的合并问题的方法,但这就是我们在团队中处理笔记本和源代码控制的方法。 基本上,我们以对待二进制文件的方式对待Mathematica笔记本。 他们已办理登机手续,但是:
我们大多使用Mathematica进行小型校对,探索和侧轨,所以上述程序对我们来说很好(我们的主要文档是在LaTeX中,它为非数学家/非程序员生成更友好的文档)
根据Simon和Kena的说法,当我使用Mathematica .nb进行版本控制时,我经常只创建一个纯文本版本的输入代码,并使用相同的名称保存它,但扩展名为.txt。 虽然这并没有直接解决合并问题,但它确实以合理的方式进行差异化工作,并且当我稍后再编辑.nb时,手动合并更加明显。 这种格式仍有一些特性,但它比原始的.nb格式更容易阅读。
要生成文本文件,我只需将笔记本复制到一个新的空白笔记本(带快捷键,Ctrl-A,C,N,V),选择菜单Cell-> Delete All Output,复制结果(Ctrl-A,C) ),并将结果粘贴到纯文本编辑器中以保存它。 一旦掌握了它,它就会花费很少的时间。
一种新的可能性是使用mathematica-notebook-filter
来解析Mathematica笔记本并剥离所有输出单元格和元数据,以便这些不会被提交到版本控制系统中。
在git的特定情况下,集成mathematica-notebook-filter
非常容易,因此git在通过使用gitattribute过滤器计算差异时自动清除输出和元数据。 您需要安装mathematica-notebook-filter
过滤器并将其添加到路径变量中(或调整下面的配置以指向二进制文件)并将以下行添加到~/.gitattributes
文件中:
*.nb filter=dropoutput_nb
这指示git使用dropoutput_nb
过滤器解析所有匹配*.nb
文件,该过滤器在~/.gitconfig
定义为:
[filter "dropoutput_nb"]
clean = mathematica-notebook-filter
smudge = cat
如果由于某种原因,您希望使用所有输出和元数据提交特定的Mathematica笔记本,则可以通过添加以下内容来禁用项目的.gitattributes
文件中的过滤器:
notebook_file.nb !filter
免责声明:我是这个工具的作者。 它是开源的,并且赞赏反馈(好的和坏的)。 Github欢迎您的贡献。
好吧,我的解决方案不是使用Notebook进行跟踪,而是使用纯文本文件(不是“Notebook”纯文本)。
只要有笔记本,就可以使用“另存为...”菜单将当前文件保存为纯文本文件。 当您需要加载它时,只需使用Mahthematica打开它。 跟踪此文件比跟踪Notebook文件要好得多。 我不确定使用纯文本格式而不是Mathematica笔记本可能会丢失哪些功能,但到目前为止我还没有发现任何缺陷。
参考: http : //www.topbug.net/blog/2013/05/02/track-mathematica-source-files-with-version-control-systems/
如果源控制系统检测到多个用户对单行的更改,则应该只获取合并标记。
源控制系统添加标记,以便在非常清楚冲突的位置时进行,并强制您手动删除它们(当您解决每个冲突时)。 源控制系统无法知道如何自动为您执行此操作。
如果文件是文本,但设计为仅由程序读取,则它可能根本没有行结束字符(或非常长的行)。 因此,如果多个人正在处理此类文件,您将收到许多合并冲突。
我不熟悉nb文件格式,但一般来说,这个问题的解决方案是确保一次只有一个人正在处理文件(即对nb文件使用独占签出模式)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.