2016-04-22 126 views
6

在工作中,我使用git作为版本控制系统和Dymola进行建模和仿真。使用Git和Dymola/Modelica进行版本控制

我遇到的一个主要问题是,一旦我触摸或错误地在图表中移动连接(更确切地说连接线的一部分的位置)而不改变任何参数 - 这通常在讨论或通过显示来解释时发生该图给同事git认为这是文件中的版本更改或更改。至少有真正的变化是一些自动生成的Modelica的注释,例如:

connect(TT_1.T, Controller.y[1]) annotation (Line(
    points={{48,-20},{48,40},{-22.5,40},{-22.5,29.25}}, 
    color={0,0,127}, 
    smooth=Smooth.None)); 

改变(比较二号线)

connect(TT_1.T, Controller.y[1]) annotation (Line(
    points={{48,-20},{48,38},{-22.5,38},{-22.5,29.25}}, 
    color={0,0,127}, 
    smooth=Smooth.None)); 

我的问题,因此是: 我怎样才能防止这种在任何一方的代码中不必要的“改变”:git还是Dymola?

+0

好吧,它是一个版本变化,因为.mo文本文件发生了变化,所以我不认为你可以在git方面对此做任何事情(除非用git来取消修改,如果它们是唯一的话) 。 – Christoph

+0

@Christoph我期待着这一点,我也想知道是否有可能以某种方式“忽略”这种变化。但如何用git撤销更改?我的意思是在提交之前有可能吗?也许这可能是答案或至少是其中的一部分! – Medi1Saif

+0

我想说你的模型的连接,布局和图形也应该是你的模型设计的一部分,它们和物理一样重要。它们可能不会影响你的物理,但它对理解模型非常有帮助,就像代码中的注释或命名约定一样,我绝不会在git中忽略它。另外,如果你确实遇到过很多像这样的问题,我认为你可能没有使用Modelica的继承功能,因为一旦设计了一个部分模型,你将无法更改其子图形。 –

回答

3

模型的图形部分也必须存储在某个位置,Modelica使用的位置称为注释。每个模型,模型的实例以及每个连接都有这样的注释。图形不会影响“pyhsical”行为,但它们对终端用户的便利性仍然很重要。
现在,如果您从GUI编辑某个图标或连接(或其他任何东西),则此更改将反映在代码中。一旦你点击保存按钮,文件将被写入磁盘,git会注意到代码已经改变。其中一些变化可能是故意的(有些人花费了很多时间在漂亮的连接上),而其他变化可能并不重要。版本控制系统绝对不可能决定你认为相关的事情,这个决定取决于你。您始终可以决定不保存更改(在Dymola中,选择Save None按钮)。

除了您所负责的更改之外,您的工具(例如Dymola)可能会尝试变得智能并进行一些自动格式化。有些用户认为Dymolas行为过于侵入性(例如,划线,插入空白,添加不相关的注释,移动注释)。可悲的是,在这里没有太多可以做的事情,除了停止使用Dymola作为编辑器(而只是将其用作模拟工具),或者您可以使用清理工具,如ttws(trim-trailing-white-space) 。据我所知,Dymola并没有围绕你的图标移动,所以你展示的例子并没有被Dymola引入。

现在,您的问题的第二部分。如果由于某种原因,你点击了保存按钮,git(以及其他任何好的版本控制系统)允许你在提交之前(或者在提交之后,但事情变得更加复杂)恢复你的更改或部分更改。此外,您不必将所有提交都推送到中央存储库。确切的工作流程取决于您使用的是哪个git客户端,以及您是使用图形用户界面还是命令行。你使用哪一个?
下面是GitExtensions的截图提交对话框(此图片是写一个答案,而不是评论的主要原因):

GitExtensions Commit Stage Revert dialog

  • 在左上角,你可以看到所有文件,其中混帐已经注意到了一个变化,在这里你可以恢复整个文件 。
  • 在左下方,您会看到暂存区域。只有暂存区域中的文件才会成为您提交的内容。
  • 在右上角,您会看到差异和上下文菜单,允许重置单行代码。
  • 在右下角,你可以输入你的提交信息。

有很多关于如何使用git的教程和书籍,您可能需要阅读这些教程和书籍,以及您所选git客户端的手册。或者,在没有任何要保存的情况下,只需单击保存按钮即可。

+0

我知道git reset,但在你的回答旁边,Carsten的评论非常有帮助。我希望有可能让图形和注释无法用于git。 – Medi1Saif

+0

我的例子当然不是由Dymola制作的,但肯定会发生,我只是想要或错误地更改某些组件的布局/坐标。当然对于Dymola来说这是一个重大的变化,但是对于我来说尤其如此,它是由错误造成的! – Medi1Saif