One command for every Git repository in the directory
With no arguments it is git status -s in every repository. mgit pull, mgit fetch --all and mgit log -n 1 work the same way. Clean repositories stay quiet, and failures are collected into one exit code.
- One binary, no runtime dependencies: no Python, no Node.js, no package manager.
- Every git argument is passed as an argument vector, never through a shell, so nothing is injected or glob expanded.
- Releases ship SHA-256 checksums and the official installers verify them before touching your PATH.
You can actually type here: this is mgit's own parsing and discovery running in your browser
The sandbox holds six repositories, and web-console has an uncommitted change. Try mgit pull. Open the full playground
The loop you stop writing
Why it existsThe loop you stop writing
An application, a shared package, some examples, the deployment scripts and a docs site, each its own repository, sitting side by side in one working directory and referring to each other by relative path, with no git submodule holding them together. That is the situation mgit was written for.
# before
for d in */; do (cd "$d" && git status -s); done
# and a second version for PowerShell, which behaved slightly differently
One command instead, and the same binary with the same test suite on all three operating systems:
mgitIt does not change the contents of any repository and it does not manage the relationships between them. Use submodules when you need to pin versions; a monorepo is the answer when you need one CI pipeline and one release.
One executable, nothing else
What it isOne executable, nothing else
A single Rust binary
macOS, Linux and Windows share the same code and the same tests. The Bash and PowerShell scripts of 1.0 are archived.
Download and run
No Python, no Node.js, no package manager. The npm package bundles the official binaries for six platforms and has no postinstall.
Verified before it is installed
Every archive ships a SHA-256 checksum and the official installers check it first. Every git argument is passed as an argument vector, never through a shell.
A transparent proxy
mgit only recognises the options in its own documentation. Everything it does not know (-c, --git-dir, …) is handed to git untouched.
It only touches directories you can see
DiscoveryIt only touches directories you can see
By default it looks one level down, and it never walks into a repository it has already found. Drag the slider to see what --depth actually reaches.
What --depth actually reaches
Working directory
Output of mgit --list
The full set of six rules, including worktrees, submodules, symbolic links and ordering, is in how repositories are found.
A report you can put in a script
OutputA report you can put in a script
The summary goes to stderr by default, so mgit status -s > status.txt leaves you clean data in the file while failures stay visible on screen.
What lands in the file, and what stays on screen
Inside the file: status.txt
Still on screen
| Code | Meaning |
|---|---|
0 | every repository succeeded |
1 | a repository failed, or no repository was found |
2 | the command line could not be parsed |
127 | git could not be started |
130 | interrupted with Ctrl+C |
| anything else | the exit code of the first failing git command |
One line, verified before it installs
InstallOne line, verified before it installs
The installer detects your operating system and CPU, downloads the matching archive and verifies its SHA-256 before installing.
curl -fsSL https://raw.githubusercontent.com/doggy8088/mgit/main/install.sh | shThe installer detects your operating system and CPU, downloads the matching archive and verifies its SHA-256 before installing anything.
irm https://raw.githubusercontent.com/doggy8088/mgit/main/install.ps1 | iexThe same flow in PowerShell. Works in Windows PowerShell 5.1 and in PowerShell 7+.
npm install -g @willh/mgitThe package bundles the official binaries for six platforms and runs no install scripts; npx @willh/mgit works without installing.
cargo install --path .Needs Rust 1.85 or newer. cargo build --release produces target/release/mgit.
Check the install: mgit --version
Manual downloads, checksum verification and building from source are in install and verify.
Documentation
Seven chapters, each one readable on its own.
Install and verify
Four ways in, all of them ending at the same thing: one binary with no runtime dependencies.
Commands and options
mgit only recognises the options in its own documentation. Everything else goes to git exactly as you typed it.
How repositories are found
Six rules in total, and the result is identical on macOS, Linux and Windows.
Output, colour and glyphs
The format has not changed since 1.0, and colour is never the only thing carrying information.
Exit codes and automation
Everything you need to know before a script decides something based on the result.
Environment and platforms
The differences between terminals are absorbed by the tool instead of being pushed onto you.
Recipes
Every block here can be pasted straight into a terminal, or tried in the playground first.