跳到內容

內建 Git

Restorm 專案本來就是要活在 git 儲存庫裡的。這個整合走得比單純的 git commit 更遠:它看得懂這個格式,能在業務實體的層級解決衝突,而不是在 YAML 的行層級。

沒有任何東西需要設定。只要開啟的 .restorm 檔案位於某個 git 儲存庫內,git 相關 介面就會啟用。

Restorm 使用的是您本機的 git:不必輸入帳號密碼,應用程式裡也不必管理權杖。 規則很簡單 — 如果 git push 在您的終端機裡能用,它在 Restorm 裡就能用。 Git 是在關閉互動提示的情況下啟動的:會要求輸入密碼的儲存庫會立刻失敗,並顯示 git 自己的訊息,而不是把介面卡住。

兩個按鈕,推送提取,當有東西要送出、或有更新的版本可以取回時,各自 會帶一個圓點(只是一個點,永遠不是數字)。

標題列的 Git 選單提供相同的動作,另外還有重新整理重設為伺服器版本歷史記錄

狀態列的 GIT 格子:重新整理、推送與提取,後兩者各帶一個圓點,再往後是歷史記錄。「推送到儲存庫」的提示框正開著。

推送對話框會顯示一份已經寫好的提交訊息,它是從結構化差異中 以決定性的方式產生的 — 完全不用語言模型。每一個被修改的實體一行(請求、 情境、資料夾、環境資料夾),絕不會每個欄位一行。

  • 一個訊息的語言選擇器,與介面語言各自獨立,並附一個開關可把它設為預設值。
  • 一個可編輯的標題,附帶一個以 72 個字元為參考的計數器。
  • 一個多行的內文

確認後會依序執行:儲存、git add、提交、推送。

Restorm 會先儲存,然後才提取並合併。

乾淨合併:樹狀清單與開啟的分頁會就地更新。

發生衝突:會開啟一個四面板的解決檢視。

四面板的衝突解決檢視:左側是衝突清單,接著是您的版本、伺服器的版本 — 有差異的 URL 以紅框標出 — 以及採用您的版本後填好的「已解決」面板。

面板內容
衝突清單發生衝突的實體
您的版本唯讀
他們的版本唯讀
已解決可編輯 — 這才是真正會被寫入的內容

關鍵在這裡:每個面板都會把實體顯示在它真正的編輯器裡 — HTTP 請求在 HTTP 編輯器裡,情境在情境編輯器裡。您解決的不是 YAML 裡的 <<<<<<< 標記,而是在 比較兩個請求。

每一邊都有一個**「使用這個版本」按鈕,而且有差異的欄位會以紅色標示** — 當只有一個欄位不同時,面板會直接開在相關的分頁上。

環境資料夾的 API 文件會自動解決(較新的版本勝出)。

取消會執行一次 git merge --abort。若在解決過程中關閉應用程式,下次啟動時 會詢問您是否要放棄這次合併。

Restorm 會定期檢查是否存在較新的版本 — 但絕不會自己合併。有三個觸發條件: 偵測到 .git 內有變動、開啟一個檔案,以及一個計時器,其頻率可在 設定 ▸ Git 中調整(Off、15 分鐘、30 分鐘、1 小時、4 小時、12 小時、 24 小時)。

此時會出現一則「有可用更新」的通知,並提供 Pull now

如果檔案自開啟以來在磁碟上被改動過,儲存會被拒絕,Restorm 會請您選擇 重新載入保留您的版本

這來自格式的兩項特性,詳見 .restorm 專案與檔案標準化的鍵順序,以及以穩定方式衍生的識別碼

結果就是:開啟後不做任何修改再儲存不會產生任何 diff,而兩個人在同一個位置新增 同一個請求時,產生的實體是合併機制能夠正確配對的。

Git ▸ 歷史記錄會開啟一個雙面板檢視:左邊是帶分支軌道的提交清單,右邊是 詳細內容。在某個提交上開啟右鍵選單,可以取回該版本。

四個工具,屬於 Pro 版:git_commit_push(兩步驟中的第一步 — 回傳一個審查 權杖、標題、內文以及逐實體的差異,完全不寫入任何東西)、 git_confirm_push(兩步驟中的第二步 — 如果專案在審查後又變動過就會被拒絕)、 git_pullgit_resolve_conflicts

拆成兩個步驟是刻意的:代理程式不可能在沒有先呈現差異的情況下推送。