Dymola、空格和版本控制

4
我在Dymola中打开了一个Modelica库,更改了一行代码后关闭了Dymola并点击“全部保存”按钮,现在TortoiseSVN显示了数百个更改的文件,而我原本只想更改一行的那个文件只有一行被更改。这些更改似乎都是由Dymola引入的空格或换行符。
当然,现在我可以小心地只提交我更改的文件(并还原其余部分),但这会使提交变得比必要复杂且容易出错。或者我可以提交所有更改,但这会使我的同事很难审查更改。此外,似乎提交不是确定性的,因此稍后的提交可能会撤消部分更改。有时我甚至会还原所有更改,然后使用文本编辑器仅更改一行。所有这些都使版本控制变得不必要复杂。
当我查看Modelica标准库的提交和差异时:
https://github.com/modelica/ModelicaStandardLibrary/commits/master
通常情况下,差异很小且易读。是否有避免空格问题的技巧?
如何关闭Dymola的所有自动格式化功能?首先这样做是否有技术上的原因?
2个回答

4
您可以通过以下方式减少(但不能完全防止)这种情况的发生:
  1. 增加最大行长度,例如到130

    • 在GUI中:选项 > 文本编辑器 > 最大行长度
    • 从命令行:Advanced.MaxLineLength = 130
  2. 让Dymola一次性格式化整个库

    • 打开顶层包的文本视图
    • 使用 Ctrl+A 全选
    • 使用 Ctrl+Shift+L 或 右键单击 > 自动格式化 进行自动格式化
    • 使用 Ctrl+Shift+S 保存所有更改
    • 现在检查更改。大多数更改都有用,但有时会删除空格,而您通常希望保留它们(尤其是在 importextends 语句之前,它们有时会被移动到最左边)
    • 提交更改
  3. 从现在开始,尽量只保存单个模型,而不是整个包
    (当保存包时,Dymola有时会重新格式化嵌套类)


3
谢谢,这很有帮助。对于任何使用SVN或Git的人来说,改进Dymola的默认设置仍然是一个重要的提升。sjoelund.se提出的OMedit方法似乎是一个非常好的起点,这至少可以将空白更改限制在我实际更改了内容的文件中,因此我只需要检查3个文件,而不是300个文件。 - Priyanka
2
请确保您正在使用Dymola 2020x或更高版本,因为这种行为在这些版本中已经减少。 - user2024223
@user2024223,这个主题有详细的发布说明吗? - Jack
1
一个解决方法是使用记事本来更改 package.mo 文件,以避免未编辑的文件中的空格更改。 - user2024223

3

有一些事情可以让 Modelica 代码的 git 提交更美观:

  1. 使用文本编辑器而非图形编辑器。这样你就能完全控制自己所做的更改。
  2. 使用不会更改空格的图形编辑器。我不确定是否有其他替代方案,但 OpenModelica/OMEdit 尽可能地保留原有的缩进(也可以用于最小化其他工具所做更改的差异,但随着更改量的增加,该方法效果越来越差)。
  3. 使用格式化程序作为预提交钩子(根据格式化器中的某些设置缩进所有文件;但是这样你就不能手动更改空格了)。
  4. 希望在 stackoverflow 上有人提供比这更多的选择。

OMEdit会尽可能保留[...] - 这听起来似乎是一件非常棘手的事情,但为什么呢?对于普通文本编辑器而言,这是正常的工作方式! - Priyanka
似乎这篇论文提供了更多细节:https://www.modelica.org/events/modelica2008/Proceedings/sessions/session6a3.pdf - Priyanka
3
OpenModelica现在采用的方法与那篇论文不同且更简单。拥有一个可操作程序并保留所有信息的API是很困难的。当前的方法比较两个具体语法树,并保留所有相同的子树,这导致只有改变的子树可能会改变格式。 - sjoelund.se
基本问题:一个“子树”有多大,是一个类还是更小?几行代码?一个包? - Priyanka
3
这将是一个完整的套餐、组件、表达或注释。它非常细致,如果文件中没有任何更改,则忽略大部分内容。 - sjoelund.se
https://doi.org/10.3384/ecp21181529 - Priyanka

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