【问题标题】:Matlab Simulink version control with multiple developers多个开发人员的 Matlab Simulink 版本控制
【发布时间】:2010-12-19 19:21:42
【问题描述】:

我们在一个由多个开发人员组成的团队中使用 Matlab Simulink 进行模型开发(和 Real-Time Workshop 自动编码)。

我们目前使用 Visual Source Safe(是的,我知道它很糟糕)进行版本控制,使用锁来防止发生冲突的更改。

我们想将我们的程序迁移到不同的版本控制系统(svn、hg 或 git),但我们担心对 Simulink .mdl 文件执行合并和差异。

有人在对 Simulink 文件执行合并方面有有用的经验吗?

【问题讨论】:

    标签: svn git matlab merge simulink


    【解决方案1】:

    SimDiff 将满足您的需求。您可以将它与您喜欢的任何软件配置管理/版本控制系统配对。

    Mike 引用的 2007 SAE 论文是在 SimMerge(后来更名为 SimDiff 4)可用之前编写的。现在,您可以将 AccuRev 或 IBM Unified Change Management 等现代软件配置管理系统用于您的 Simulink 项目。

    至少有两篇较新的论文取代了 2007 年的论文。 Xilinx 的那篇文章准确地展示了如何将 SimDiff 与 SVN/Subversion 集成。

    披露:我在 2005-2015 年间参与了 SimDiff 的开发。

    【讨论】:

      【解决方案2】:

      DiffPlug 可以图形方式比较 Simulink 文件,并且它集成到 SVN 和 Git 中。它有一个命令行界面,所以你也可以将它与 SourceSafe 集成......

      http://www.diffplug.com/products/dp.simulink.differ

      【讨论】:

        【解决方案3】:

        Mathworks 推荐使用Simulink Projects,这是 R2011b 中的新功能。详情请见Seth on Simulink blog

        Simulink Projects 会将 MATLAB/Simulink 与您的版本控制系统集成,并提供其他功能。

        就合并 Simulink 而言,我认为当前的最佳做法是尽可能避免它。这可以在适当的情况下使用模型引用和库链接来完成,以确保每个配置项都足够小。

        【讨论】:

          【解决方案4】:

          Xilinx 最近发布了一份app note,详细介绍了如何使用 SimDiff 和 SimMerge 配置 Subversion,以进行基于团队的 Simulink 模型开发。

          来自应用说明:

          “本应用笔记概述了如何使用 System Generator 工具执行源代码版本控制和基于团队的设计。这些任务可以使用 MATLAB®Simulink® 软件环境的原生版本控制功能来完成,或者使用外部源代码控制系统。虽然本应用笔记重点介绍 Subversion,这是一个众所周知的免费开源控制系统,但也可以使用其他版本控制软件,例如 CVS、MS Source Safe 和 Clear Case,具体取决于设计环境。本应用笔记还演示了如何使用 Ensoft 的 SimDiff 和 SimMerge 外部软件包以图形方式比较和合并基于模型的设计。”

          【讨论】:

            【解决方案5】:

            请查看http://www.ikv.de/mediniunite/ 也许这有助于解决您的问题。 通过 medini unite,我们为 Matlab/Simulink/Stateflow 提供了一个有用的 Diff/Merge 工具,它非常易于使用,当然也可以集成到不同的版本控制系统中。

            【讨论】:

            • Olaf,这看起来是一个很好的解决方案——尽管我怀疑它相当昂贵。我不太喜欢那些让你填写所有详细信息只是为了获得报价的网站的产品,而不仅仅是告诉你它们在网站上的成本。
            • 乔恩,我明白你的意思。但另一方面,如果没有任何用户反馈,开发像 medini unity 这样的工具是非常困难的。不幸的是,当我们的工具无需注册即可使用时,这就是我们的经验。请将您的问题发送至 information@ikv.de,我会尽快回复。
            【解决方案6】:

            如前所述,Mathworks 正在为 Simulink 开发差分工具,基本上是将它们导出为 XML 文件,然后进行比较。虽然我认为这不会比任何现有的版本控制系统更有助于合并文件。

            我已经开始将Mercurial 用于我们的 MATLAB 代码和 Simulink 模型。它在一些相当大的 simulink 模型上运行良好且快速,但作为一个开发人员,我还没有处理任何复杂的合并。一个简单的 diff 和 merge 通常会引发几个冲突,这些冲突只不过是语法更改,通常是日期戳和版本号。

            如果可能的话,我的建议是使用模型引用。我有一个大型模型,它基本上使用模型引用链接了六个子模型。每个子模型都受版本控制,只有一个开发人员负责一个子模型,然后在合并不同的 simulink 模型时绕过很多问题。

            【讨论】:

            • 谢谢阿德里安。您提到的模型引用策略与 Mike 引用的文章中的策略相似。我绝对希望看到 Mathworks 为模型提供更易于合并的文件格式,因此 XML 路由可能是一个解决方案。
            【解决方案7】:

            虽然我没有具体的经验,svn 可以很好地处理非文本文件。你有两个选择:

            1. 如果 mdl 文件不是二进制文件(自从我使用 Simulink 以来已经有太多年了),使用 auto-props feature 将 mdl 文件的文件 svn:mime-type 属性设置为“application/octet-stream”或者通过使用 svn propset 手动设置属性。它不会尝试合并,并且在发生冲突的签入时将需要操作员采取行动来解决差异。
            2. 将存储库设置为锁定存储库,例如 VSS(请不要起火)。这是一个不错的step-by-step guide

            【讨论】:

            • Marc,Simulink .mdl 文件是基于文本的,但其中的某些元素会增加自动合并破坏文件的可能性(例如,AFAIK,块之间的行由它们定义xy 坐标,所以如果一个块在屏幕上移动,自动合并可能会造成损坏)。感谢您提供有关 SVN 设置的提示。听起来锁定或手动合并是目前唯一的解决方案。
            【解决方案8】:

            Simulink 模型文件的文本合并会很困难。这是一个article,它提供了有关使用 Simulink 时的配置管理的一些信息。

            至于差异,从我相信 R2008b+ 开始,Simulink 报告生成器中有一个差异工具。这是该功能的文档的link

            迈克

            【讨论】:

            • 谢谢 Mike,我没有找到你引用的那篇文章,这是对所涉及的一些问题的很好的讨论。似乎 ATM 唯一现实的选择是使用锁,或者至少强制执行手动合并。
            • 其实有 SimDiff 和 SimMerge 等工具可以直接比较和合并您的模型,而无需将它们转换为另一种格式。 SimDiff 自 2005 年以来一直可用。参考的论文有点过时了;这里有两篇较新的论文:xilinx.com/support/documentation/application_notes/xapp498.pdfsae.org/technical/papers/2010-01-0940 Xilinx 论文解释了如何将 SimDiff 和 SimMerge 与 SVN 结合使用。有关详细信息,请参阅我的答案:*.com/questions/1788646/…
            • 文章链接失效
            最近更新 更多