一個指令,管好整個目錄下的所有 Git 儲存庫
不帶參數就等於對每個 repo 跑 git status -s;mgit pull、mgit fetch --all、mgit log -n 1 也一樣。乾淨的儲存庫不出聲,失敗的會被彙總成一個結束代碼。
- 單一二進位檔,沒有執行期相依:不需要 Python、Node.js 或任何套件管理器。
- 所有 git 參數以陣列傳遞、不經過 shell,沒有參數注入與 glob 展開的問題。
- 發行檔附 SHA-256,官方安裝腳本先驗證再安裝。
真的可以打字:這是 mgit 的解析與走訪邏輯跑在你的瀏覽器裡
沙箱裡的工作目錄有六個儲存庫,其中 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 的問題。
一個執行檔,沒有別的
它是什麼一個執行檔,沒有別的
單一 Rust 二進位檔
macOS、Linux、Windows 共用同一套程式與同一組測試。1.0 時代的 Bash 與 PowerShell 雙腳本已經封存。
下載即可執行
不需要 Python、Node.js 或任何套件管理器。npm 版本內含 6 個平台的官方二進位檔,而且沒有 postinstall。
先驗證再安裝
每個發行檔都附 SHA-256,官方安裝腳本一律先驗證再安裝。所有 git 參數以陣列傳遞、不經過 shell。
透明代理
mgit 只認得自己文件上列出的選項,不認得的(-c、--git-dir…)原封不動交給 git。
它只會動到你看得到的那些目錄
搜尋規則它只會動到你看得到的那些目錄
預設只找第一層子目錄,而且不會走進已經找到的儲存庫。拉一下滑桿,看 --depth 到底多找到什麼。
--depth 到底多找到什麼
工作目錄
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 之後才安裝。
irm https://raw.githubusercontent.com/doggy8088/mgit/main/install.ps1 | iex同一套流程的 PowerShell 版本,Windows PowerShell 5.1 與 PowerShell 7+ 都可以用。
npm install -g @willh/mgit套件內含 6 個平台的官方二進位檔,沒有 postinstall 腳本;也可以用 npx @willh/mgit 直接執行。
cargo install --path .需要 Rust 1.85 以上。cargo build --release 會產生 target/release/mgit。
安裝完驗證一下: mgit --version
手動下載、檢查碼驗證與從原始碼建置的步驟,在 安裝與驗證。