Matlab Simulink版本控制与多个开发人员

时间:2009-11-24 08:26:30

标签: svn git matlab merge simulink

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

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

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

有没有人在Simulink文件上执行合并方面有经验?

8 个答案:

答案 0 :(得分:6)

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

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

麦克

答案 1 :(得分:5)

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

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

至少有两篇新论文取代了2007年的论文。来自Xilinx的那个显示了如何将SimDiff与SVN / Subversion集成。

披露:我从2005年到2015年参与了SimDiff的开发。

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:3)

Mathworks建议使用Simulink Projects,这是R2011b中的新功能。有关详细信息,请参阅Seth on Simulink blog

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

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

答案 4 :(得分:3)

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

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

答案 5 :(得分:2)

Xilinx最近发布了app note详细说明如何使用SimDiff和SimMerge配置Subversion,以便基于团队开发Simulink模型。

从应用说明:

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

答案 6 :(得分:1)

虽然我没有特定的经验,但svn很好地处理非文本文件。您有两种选择:

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

答案 7 :(得分:1)

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