【问题标题】:Dymola, whitespace and version controlDymola、空白和版本控制
【发布时间】:2020-10-23 09:47:57
【问题描述】:

我在 Dymola 中打开了一个 Modelica 库,更改了一行,关闭了 Dymola 并单击“全部保存”,现在 TortoiseSVN 显示了数百个更改的文件,而不是只显示一个文件,而我打算更改的一行。所有这些更改似乎都是由 Dymola 引入的空格或换行符。

当然,我现在可以小心地只提交我已更改的文件(并恢复其余文件),但这使得提交比需要的更耗时且更容易出错。或者我可以全部提交,但这让我的同事很难审查更改。此外,感觉它不是确定性的,因此稍后的提交可能只是将部分还原。有时我什至会还原所有更改,然后使用文本编辑器仅更改一行。所有这些都使版本控制变得不必要地复杂。

当我查看提交和差异时,例如Modelica 标准库:
https://github.com/modelica/ModelicaStandardLibrary/commits/master
差异很好,很小并且通常可读。有没有避免空格问题的技巧?
如何关闭 Dymola 的所有自动格式化?首先有技术原因吗?

【问题讨论】:

    标签: tortoisesvn whitespace line-breaks modelica dymola


    【解决方案1】:

    您可以按如下方式减少(但不能完全防止)这种行为:

    1. 增加最大行长,例如到 130

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

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

    【讨论】:

    • 谢谢,这很有帮助。对于任何使用 SVN 或 git 来改进 Dymola 默认值的人来说,这仍然是一个很大的改进。 sjoelund.se 概述的 OMedit 方法似乎是一个非常好的起点,这至少会限制对我实际更改任何内容的文件的空白更改,因此我只需要检查 3 个文件而不是 300 个文件。
    • 另外请确保您使用的是 Dymola 2020x 或更高版本,因为在这些版本中此行为已减少。
    • @user2024223,有关于这个主题的详细发行说明吗?
    • 一种解决方法是使用记事本更改 package.mo 文件,以避免在未编辑的文件中更改空格。
    【解决方案2】:

    您可以做一些事情来为 Modelica 代码做出漂亮的 git 提交:

    1. 使用文本编辑器而不是图形编辑器。您对所做的更改拥有绝对的控制权。
    2. 使用不改变空格的图形编辑器。我不确定其他替代方案,但 OpenModelica/OMEdit 将尽可能保留现有的缩进(它也可以用于最小化与其他工具更改的差异,但随着更改的增多,它的效果会越来越差)。
    3. 使用格式化程序作为预提交挂钩(根据格式化程序中的某些设置缩进所有文件;但是您不能手动更改空格)。
    4. 希望 stackoverflow 上的人有比这更多的选择。

    【讨论】:

    • “OMEdit 将尽可能地保留 [...]” - 这听起来像是一件非常棘手的事情 - 但为什么呢?对于普通的文本编辑器来说,这是正常的工作方式!?
    • 似乎这篇论文提供了更多细节:modelica.org/events/modelica2008/Proceedings/sessions/…
    • OpenModelica 现在使用的方法与那篇论文不同且更容易。很难有一个 API 来操作程序并保存所有信息。当前方法比较 2 个具体的语法树并保留所有相同的子树,这导致只有更改的子树可能会更改格式。
    • 可能的基本问题:一棵“子树”有多大,是一类还是更小?几行?一个包裹?
    • 它将是一个完整的包、一个组件、一个表达式或注释。它非常细粒度,如果文件中没有任何更改,则忽略文件的大部分。
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 2010-10-02
    • 2013-02-10
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多