使用Git进行Dymola/Modelica版本控制

6

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

我遇到的一个主要问题是,一旦我触摸或误操作了图表中的连接(更确切地说是连接线的某个部分的位置),而没有改变任何参数-通常在向同事展示图表时会发生这种情况-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中发生不必要的“更改”代码?


好的,这是一个版本更改,因为.mo文本文件发生了变化,所以我认为你在git方面无法做任何事情(除非撤销git中的更改,如果它们是唯一的更改)。 - Christoph
@Christoph 我早就料到了这个问题,同时我也在想是否有可能以某种方式“忽略”这些更改。但是如何使用git撤消更改呢?我的意思是说,在提交之前是否有可能进行撤消操作?也许这可以作为一个答案或至少是其中的一部分! - Medi1Saif
1
从与长期用户的一些讨论中得知,这个问题被提出来了。Dymola 在“空格”修改方面存在问题。 - Scott G
1
我认为你把“版本”和“发布”混淆了。在开发任何代码的过程中,你会做出无数次更改。这些更改应该提交到你的版本控制系统中。但是你不应该犯这样一个错误,认为这是一个发布(即应该触发用户升级的更改)。我不清楚你认为这里的“问题”是什么。如果这些评论没有解决你的问题,也许你可以详细说明一下。 - Michael Tiller
1
图形界面就是代码。关于你的git问题,可以阅读一下git reset,例如这里 - Christoph
显示剩余7条评论
1个回答

3
您的模型的图形部分也需要存储在某个地方,而Modelica使用的地方是所谓的注释。每个模型、模型实例和每个连接都有这些注释。这些图形不会影响“物理”行为,但对最终用户的便利性仍然很重要。
现在,如果您从GUI中编辑某个图标或连接(或任何其他内容),此更改将反映在代码中。一旦单击保存按钮,文件将写入磁盘,并且git将注意到代码已更改。其中一些更改可能是有意的(某些人会投入大量时间来制作漂亮的连接),而其他更改可能并不重要。版本控制系统绝对无法决定您认为哪些更改是相关的,这个决定由您自己做出。您随时可以决定不保存更改(在Dymola中,选择Save None按钮)。
除了你需要负责的更改外,你的工具(例如Dymola)可能会试图变得聪明并进行一些自动格式化。有些用户认为Dymola的行为过于侵入式(例如,断开行,插入空格,添加不相关的注释,移动注释)。不幸的是,在这里你无法做太多事情,除非当然停止使用Dymola作为编辑器(而仅将其用作仿真工具),或者你可以使用清理工具,例如ttws(修剪尾随空格)。据我所知,Dymola不会移动你的图标,因此你展示的例子不是由Dymola引起的。
现在,你问题的第二部分。如果由于某种原因你已经点击了保存按钮,git(以及任何其他好的版本控制系统)允许你在提交之前或提交后恢复你的更改或部分更改。此外,你不必将所有提交推送到中央仓库。确切的工作流程取决于你使用哪个git客户端以及是否使用图形用户界面或命令行。你使用哪一个?
下面是GitExtensions提交对话框的屏幕截图(这张图片是撰写答案而不是评论的主要原因):

GitExtensions Commit Stage Revert dialog

  • 左上角显示了所有被 git 感知到有变更的文件,您可以在此还原整个文件。
  • 左下角显示了暂存区。只有暂存区中的文件才会成为提交的一部分。
  • 右上角显示差异以及上下文菜单,可允许重置单行代码。
  • 右下角则是您输入提交信息的位置。

关于如何使用 git 的教程和书籍很多,您可能想要阅读它们,以及您选择的 git 客户端的手册。或者,当没有需要保存的内容时,您可以简单地不点击保存按钮。


我知道git reset,但除了你的回答之外,Carsten的评论也非常有帮助。我希望有可能使图形和注释对于git不可追踪。 - Medi1Saif
我的例子并不是仅由Dymola制作的,但有时我只是想要或者错误地更改一些组件的布局/坐标。当然,对于Dymola来说这是重大变化,但对于我来说,特别是在它是由错误创建的情况下,这并不重要! - Medi1Saif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接