繁体   English   中英

Mathematica笔记本的版本控制

[英]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笔记本。 他们已办理登机手续,但是:

  • 我们总是保留一份pdf副本和.nb(备份用于恢复信息,以防我们因某些原因丢失读数.nb文件的能力。仍然是专有格式,但更广泛,Adobe和Wolfram的可能性都很大不会同时消失)
  • 我们不允许合并
  • 我们只对最终产品(呈现的笔记本)进行代码检查,而不是.nb文件。

我们大多使用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.ne​​t/blog/2013/05/02/track-mathematica-source-files-with-version-control-systems/

如果源控制系统检测到多个用户对单行的更改,则应该只获取合并标记。

源控制系统添加标记,以便在非常清楚冲突的位置时进行,并强制您手动删除它们(当您解决每个冲突时)。 源控制系统无法知道如何自动为您执行此操作。

如果文件是文本,但设计为仅由程序读取,则它可能根本没有行结束字符(或非常长的行)。 因此,如果多个人正在处理此类文件,您将收到许多合并冲突。

我不熟悉nb文件格式,但一般来说,这个问题的解决方案是确保一次只有一个人正在处理文件(即对nb文件使用独占签出模式)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM