A command-line tool to display the status of multiple Git repositories in a clear, tabular format.
- Scans directories recursively for Git repositories
- Displays status (clean/dirty, branch, etc.) in a table
- Fast and user-friendly CLI
- Useful for developers managing many repositories
With Homebrew on macOS (Apple Silicon and Intel) or Linux (x86_64):
brew install bircni/tap/git-statusesThis also installs the bash, zsh and fish completions.
With Cargo, which needs Rust installed:
cargo install git-statusesInstallation with cargo-binstall:
cargo binstall git-statusesOr clone and build manually:
git clone https://github.com/bircni/git-statuses.git
cd git-statuses
cargo build --releaseRun in any directory to scan for Git repositories:
A tool to display git repository statuses in a table format
Usage: git-statuses [OPTIONS] [DIR]
Arguments:
[DIR] Directory to scan [default: .]
Options:
-d, --depth <DEPTH> Recursively scan all subdirectories to the given depth. If set to 1, only the current directory is scanned. If set to a negative value, all subdirectories are scanned. (this may take a while) [default: 1]
-r, --remote Show remote URL
-c, --condensed Use a condensed layout
-s, --summary Show a summary of the scan
-f, --fetch Run a fetch before scanning to update the repository state Note: This may take a while for large repositories
-F, --ff Run a fast-forward merge after fetching
-l, --legend Print a legend explaining the color codes and statuses used in the output
--subdir <SUBDIR> Look in a specific subdir if it exists for each folder This can be useful, if you don't checkout in a folder directly but in a subfolder like `repo-name/checkout`
--completions <SHELL> Generate shell completions [possible values: bash, elvish, fish, powershell, zsh]
-p, --path Show the path to the repository
-n, --non-clean Only show non clean repositories
--json Output in JSON format
-h, --help Print help
-V, --version Print version
The tool prints a table with the following columns:
- Directory (relative to the scanned directory,
⎇marks a worktree) - Branch
- Local (commits ahead/behind the upstream, or
local-only) - Commits
- Status (run
git-statuses --legendfor what each one means) - Remote and Path, with
--remoteand--path
The report goes to stdout and diagnostics go to stderr, so --json can be piped
straight into another tool:
git-statuses --json | jq '.repositories[] | select(.status != "Clean")'- Requires the latest stable Rust (1.99+, edition 2024)
- Linting:
cargo clippy - Tests:
cargo test
Contributions are welcome! Please open issues or pull requests.

