mgit2.0.2
單一 Rust 二進位檔 · macOS · Linux · Windows

一個指令,管好整個目錄下的所有 Git 儲存庫

不帶參數就等於對每個 repo 跑 git status -s;mgit pull、mgit fetch --all、mgit log -n 1 也一樣。乾淨的儲存庫不出聲,失敗的會被彙總成一個結束代碼。

  • 單一二進位檔,沒有執行期相依:不需要 Python、Node.js 或任何套件管理器。
  • 所有 git 參數以陣列傳遞、不經過 shell,沒有參數注入與 glob 展開的問題。
  • 發行檔附 SHA-256,官方安裝腳本先驗證再安裝。

真的可以打字:這是 mgit 的解析與走訪邏輯跑在你的瀏覽器裡

沙箱終端機 — 一切都在這個分頁裡
這個終端機需要 JavaScript。頁面其餘部分(安裝指令、選項表、所有文件)不需要。
~/work $
Enter 執行Tab 補字Ctrl+C 中斷

沙箱裡的工作目錄有六個儲存庫,其中 web-console 有一筆未提交的變更。試試 mgit pull。 打開完整試用場

你不用再寫這個迴圈了

為什麼會有這個工具

你不用再寫這個迴圈了

應用程式、共用套件、範例、部署腳本、文件站各自是一個 repo,散在同一個工作目錄底下,彼此用相對路徑互相參考,卻沒有用 git submodule 綁在一起。這是 mgit 被寫出來的原因。

# 以前
for d in */; do (cd "$d" && git status -s); done

# 而且在 PowerShell 上要再寫一份,行為還不一樣

換成一個指令,而且三個作業系統上是同一個執行檔、同一組測試:

mgit

它不改變任何 repo 的內容,也不處理 repo 之間的版本關係。需要精確鎖定版本請用 submodule;需要單一 CI 與發佈流程,那是 monorepo 的問題。

一個執行檔,沒有別的

它是什麼

一個執行檔,沒有別的

8 個發行目標

單一 Rust 二進位檔

macOS、Linux、Windows 共用同一套程式與同一組測試。1.0 時代的 Bash 與 PowerShell 雙腳本已經封存。

零執行期相依

下載即可執行

不需要 Python、Node.js 或任何套件管理器。npm 版本內含 6 個平台的官方二進位檔,而且沒有 postinstall。

可驗證

先驗證再安裝

每個發行檔都附 SHA-256,官方安裝腳本一律先驗證再安裝。所有 git 參數以陣列傳遞、不經過 shell。

不重新發明 git

透明代理

mgit 只認得自己文件上列出的選項,不認得的(-c、--git-dir…)原封不動交給 git。

它只會動到你看得到的那些目錄

搜尋規則

它只會動到你看得到的那些目錄

預設只找第一層子目錄,而且不會走進已經找到的儲存庫。拉一下滑桿,看 --depth 到底多找到什麼。

--depth 到底多找到什麼

1 找到 1 個儲存庫

工作目錄


mgit --list 的輸出


完整的六條規則(含 worktree、submodule、符號連結與排序)在 它怎麼找儲存庫。

一份可以放進腳本的報告

輸出

一份可以放進腳本的報告

摘要預設寫到 stderr,所以 mgit status -s > status.txt 拿到的是乾淨的資料,失敗仍然看得見。

哪些字進了檔案,哪些留在畫面上

檔案裡的內容: status.txt


還留在畫面上的


結束代碼
代碼意義
0所有儲存庫都成功
1有儲存庫失敗,或找不到任何儲存庫
2命令列參數無法解析
127找不到或無法執行 git
130被 Ctrl+C 中斷
其他第一個失敗的 git 指令的結束代碼

一行指令,先驗證再安裝

安裝

一行指令,先驗證再安裝

安裝腳本會偵測作業系統與 CPU、下載對應的發行檔、驗證 SHA-256 之後才安裝。

curl -fsSL https://raw.githubusercontent.com/doggy8088/mgit/main/install.sh | sh

安裝腳本會偵測作業系統與 CPU、下載對應的發行檔,驗證 SHA-256 之後才安裝。

安裝完驗證一下: mgit --version

手動下載、檢查碼驗證與從原始碼建置的步驟,在 安裝與驗證。