2016-04-22 94 views
6

在工作中,我使用git作爲版本控制系統和Dymola進行建模和仿真。使用Git和Dymola/Modelica進行版本控制

我遇到的一個主要問題是,一旦我觸摸或錯誤地在圖表中移動連接(更確切地說連接線的一部分的位置)而不改變任何參數 - 這通常在討論或通過顯示來解釋時發生該圖給同事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?

+0

好吧,它是一個版本變化,因爲.mo文本文件發生了變化,所以我不認爲你可以在git方面對此做任何事情(除非用git來取消修改,如果它們是唯一的話) 。 – Christoph

+0

@Christoph我期待着這一點,我也想知道是否有可能以某種方式「忽略」這種變化。但如何用git撤銷更改?我的意思是在提交之前有可能嗎?也許這可能是答案或至少是其中的一部分! – Medi1Saif

+0

我想說你的模型的連接,佈局和圖形也應該是你的模型設計的一部分,它們和物理一樣重要。它們可能不會影響你的物理,但它對理解模型非常有幫助,就像代碼中的註釋或命名約定一樣,我絕不會在git中忽略它。另外,如果你確實遇到過很多像這樣的問題,我認爲你可能沒有使用Modelica的繼承功能,因爲一旦設計了一個部分模型,你將無法更改其子圖形。 –

回答

3

模型的圖形部分也必須存儲在某個位置,Modelica使用的位置稱爲註釋。每個模型,模型的實例以及每個連接都有這樣的註釋。圖形不會影響「pyhsical」行爲,但它們對終端用戶的便利性仍然很重要。
現在,如果您從GUI編輯某個圖標或連接(或其他任何東西),則此更改將反映在代碼中。一旦你點擊保存按鈕,文件將被寫入磁盤,git會注意到代碼已經改變。其中一些變化可能是故意的(有些人花費了很多時間在漂亮的連接上),而其他變化可能並不重要。版本控制系統絕對不可能決定你認爲相關的事情,這個決定取決於你。您始終可以決定不保存更改(在Dymola中,選擇Save None按鈕)。

除了您所負責的更改之外,您的工具(例如Dymola)可能會嘗試變得智能並進行一些自動格式化。有些用戶認爲Dymolas行爲過於侵入性(例如,劃線,插入空白,添加不相關的註釋,移動註釋)。可悲的是,在這裏沒有太多可以做的事情,除了停止使用Dymola作爲編輯器(而只是將其用作模擬工具),或者您可以使用清理工具,如ttws(trim-trailing-white-space) 。據我所知,Dymola並沒有圍繞你的圖標移動,所以你展示的例子並沒有被Dymola引入。

現在,您的問題的第二部分。如果由於某種原因,你點擊了保存按鈕,git(以及其他任何好的版本控制系統)允許你在提交之前(或者在提交之後,但事情變得更加複雜)恢復你的更改或部分更改。此外,您不必將所有提交都推送到中央存儲庫。確切的工作流程取決於您使用的是哪個git客戶端,以及您是使用圖形用戶界面還是命令行。你使用哪一個?
下面是GitExtensions的截圖提交對話框(此圖片是寫一個答案,而不是評論的主要原因):

GitExtensions Commit Stage Revert dialog

  • 在左上角,你可以看到所有文件,其中混帳已經注意到了一個變化,在這裏你可以恢復整個文件 。
  • 在左下方,您會看到暫存區域。只有暫存區域中的文件纔會成爲您提交的內容。
  • 在右上角,您會看到差異和上下文菜單,允許重置單行代碼。
  • 在右下角,你可以輸入你的提交信息。

有很多關於如何使用git的教程和書籍,您可能需要閱讀這些教程和書籍,以及您所選git客戶端的手冊。或者,在沒有任何要保存的情況下,只需單擊保存按鈕即可。

+0

我知道git reset,但在你的回答旁邊,Carsten的評論非常有幫助。我希望有可能讓圖形和註釋無法用於git。 – Medi1Saif

+0

我的例子當然不是由Dymola製作的,但肯定會發生,我只是想要或錯誤地更改某些組件的佈局/座標。當然對於Dymola來說這是一個重大的變化,但是對於我來說尤其如此,它是由錯誤造成的! – Medi1Saif