使用git与Dymola/Modelica进行版本控制

Med*_*aif 6 git modelica dymola

在工作中,我使用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));
Run Code Online (Sandbox Code Playgroud)

改为(比较第2行)

 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));
Run Code Online (Sandbox Code Playgroud)

因此,我的问题是:如何防止任何一方代码中出现这种不必要的"改变":git或Dymola?

mat*_*tth 3

模型的图形部分也必须存储在某个地方,Modelica 使用的地方就是所谓的注释。每个模型、模型实例以及每个连接都有这样的注释。图形不会影响“物理”行为,但它们对于最终用户的便利仍然很重要。
现在,如果您从 GUI 编辑某些图标或连接(或其他任何内容),此更改将反映在代码中。一旦您单击“保存”按钮,该文件将被写入磁盘,并且 git 会注意到代码已更改。其中一些更改可能是有意的(有些人投入大量时间在漂亮的连接上),而其他更改可能并不重要。版本控制系统绝对无法决定您认为相关的内容,该决定取决于您。您始终可以决定不保存更改(在 Dymola 中,选择 按钮Save None)。

除了您负责的更改之外,您的工具(例如 Dymola)可能会尝试变得智能并执行一些自动格式化。有些用户认为 Dymolas 的行为过于侵入性(例如换行、插入空格、添加不相关的注释、移动注释)。遗憾的是,您在这里无能为力,当然除了停止使用 Dymola 作为编辑器(而仅将其用作模拟工具),或者您可以使用像 ttws (trim-trailing-white-space) 这样的清理工具。据我所知,Dymola 不会在您的图标周围移动,因此您展示的示例不是 Dymola 引入的。

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

GitExtensions 提交阶段恢复对话框

  • 在左上角,您可以看到 git 注意到更改的所有文件,在这里您可以恢复整个文件。
  • 在左下角,您可以看到暂存区。只有暂存区域中的文件才会成为您提交的一部分。
  • 在右上角,您可以看到差异和允许重置单行代码的上下文菜单。
  • 在右下角,您可以输入提交消息。

有许多关于如何使用 git 的教程和书籍,您可能想阅读这些内容,以及您选择的 git 客户端的手册。或者,当没有要保存的内容时,您根本不单击“保存”按钮。