使用 git 和 Dymola/Modelica 的版本控制

Version control using git with Dymola/Modelica

在工作中,我使用 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));

更改为(比较第 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));

因此我的问题是: 我怎样才能在两边的代码中防止这种不必要的 "change":git 或 Dymola?

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

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

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

  • 在左上角,您会看到 git 发现有变化的所有文件, 在这里你可以恢复整个文件。
  • 在左下角,您会看到暂存区。只有暂存区中的文件将成为您提交的一部分。
  • 在右上角,您会看到差异和允许重置单行代码的上下文菜单。
  • 在右下角,您可以输入您的提交信息。

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