Svn 具有多个开发人员的Matlab Simulink版本控制

Svn 具有多个开发人员的Matlab Simulink版本控制,svn,git,matlab,merge,simulink,Svn,Git,Matlab,Merge,Simulink,我们使用MatlabSimulink在几个开发人员的团队中进行模型开发(和实时车间自动编码) 我们目前使用VisualSourceSafe(是的,我知道它很糟糕)进行版本控制,使用锁来防止冲突更改 我们希望将程序迁移到不同的版本控制系统(svn、hg或git),但我们关心的是在Simulink.mdl文件上执行合并和差异 是否有人有在Simulink文件上执行合并的有用经验?Simulink模型文件的文本合并将很困难。下面是一个示例,它提供了使用Simulink时有关配置管理的一些信息 至于差异

我们使用MatlabSimulink在几个开发人员的团队中进行模型开发(和实时车间自动编码)

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

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


是否有人有在Simulink文件上执行合并的有用经验?

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

至于差异,Simulink报告生成器中有一个差异化工具,我相信R2008b+。这是一个关于该特性的文档


Mike

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

  • 如果mdl文件还不是二进制文件(我使用Simulink已经很多年了),请使用或通过svn propset手动设置属性,将mdl文件的file svn:mime type属性设置为“application/octet stream”。它不会尝试合并,在发生冲突的签入时,将需要操作员操作以解决差异
  • 将您的存储库设置为锁定存储库,如VSS(请不要使用火焰)。这是一个很好的例子

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

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

    我的建议是,如果可能的话,使用模型参考。我有一个大模型,它基本上使用模型引用链接了六个子模型。每个子模型都处于版本控制之下,只有一个开发人员负责一个子模型,然后在合并不同的simulink模型时,它会回避许多问题。

    请看一看可能有助于解决您的问题。 借助medini unite,我们为Matlab/Simulink/Stateflow提供了一个有用的Diff/Merge工具,该工具非常易于使用,当然也可以集成到不同版本的控制系统中

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

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

    至少有两篇较新的论文取代了2007年的论文。Xilinx中的一个演示了如何将SimDiff与SVN/Subversion集成

    • ,来自Xilinx
    • ,摘自SAE 2010年世界大会

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

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

    从应用程序说明:


    “此应用程序说明概述了如何使用System Generator工具执行源代码版本控制和基于团队的设计。这些任务可以使用MATLAB®Simulink®软件环境固有的版本控制功能或外部源代码控制系统来完成。虽然本应用程序说明的重点是Subversion,这是一种众所周知的免费开源控制系统,但根据设计环境,也可以使用其他版本控制软件,如CVS、MS source Safe和Clear Case。本应用说明还演示了如何使用Ensoft的SimDiff和SimMerge外部软件包以图形方式比较和合并基于模型的设计。“Mathworks建议使用的是R2011b中新增的。有关详细信息,请参阅

    Simulink项目将MATLAB/Simulink与您的版本控制系统集成,并提供附加功能


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

    DiffPlug可以图形化地区分Simulink文件,并将其集成到SVN和Git中。它有一个命令行接口,所以您也可以将其与SourceSafe集成


    Marc,Simulink.mdl文件是基于文本的,但其中的一些元素会增加自动合并破坏文件的可能性(例如,AFAIK,块之间的线由它们的x-y坐标定义,因此如果块在屏幕上移动,自动合并可能会造成损坏)。感谢您提供有关SVN设置的提示。听起来锁定或手动合并是目前唯一的解决方案。感谢Mike,我没有找到您引用的那篇文章,这篇文章对涉及的一些问题进行了很好的讨论。ATM似乎唯一现实的选择是使用锁定,或者至少强制手动合并。实际上,有SimDiff和SimMerge等工具可以直接区分和合并模型,而无需将其转换为其他格式。SimDiff自2005年开始提供。参考的论文有点过时;以下是两篇较新的论文:Xilinx论文解释了如何将SimDiff和SimMerge与SVN结合使用。更多详细信息,请参阅我的答案:文章的链接是brokenThanks Adrian。您提到的模型引用策略是