rsmultigit-0.1.11 is not a library.
RSMultiGit - Rust Multi Git
A fast CLI tool for managing multiple git repositories at once. Run status checks, builds, pulls, greps, and more across all your repos in a single command.
Documentation
Full documentation: https://veltzer.github.io/rsmultigit/
Features
- Batch operations — pull, diff, grep, clean, and build across all repos at once
- Smart discovery — finds git repos via glob patterns, explicit folder lists, or automatic fallback
- Dirty/untracked detection — uses libgit2 for fast native repo inspection
- Build system support — make, pydmt, rsconstruct, bootstrap, virtualenv workflows
- Selective output — only prints repos where work was done; use
-vfor all - Flexible filtering —
--print-notto invert selection,--tersefor minimal output,--statsfor counts - Shell completions — bash, zsh, fish, elvish, powershell
Installation
Download pre-built binary (Linux)
Pre-built binaries are available for x86_64 and aarch64 (arm64).
# x86_64
# aarch64 / arm64
Or without the GitHub CLI:
# x86_64
# aarch64 / arm64
Build from source
Quick Start
# Navigate to a directory containing git repos (e.g. ~/git/myorg)
# See which repos are dirty
# Pull all repos
# Count dirty repos with stats
# Grep across all repos
# Show status of all repos
# List discovered projects
# Build all rsconstruct projects
# Generate shell completions
Commands
Inspection
| Command | Description |
|---|---|
count dirty |
Count dirty repositories |
count untracked |
Count repositories with untracked files |
count synchronized |
Count non-synchronized repositories (ahead/behind remote) |
status |
Show status of repositories |
dirty |
Show dirty repositories |
list-repos |
List discovered projects |
age |
Show the age of the last commit per repo |
authors |
Show unique commit authors per repo |
config <key> |
Show a git config value across all repos |
size |
Show the size of the .git directory per repo |
last-tag |
Show the most recent tag per repo |
Operations
| Command | Description |
|---|---|
pull |
Pull all repositories |
push |
Push all repositories |
fetch |
Fetch from origin for all repositories |
stash push |
Stash working-tree changes |
stash pop |
Pop the most recent stash |
reset hard/soft/mixed |
Reset HEAD across all repositories |
diff |
Show diff for all repositories |
log |
Show recent commits (default 10) |
tag local |
List local tags |
tag remote |
List remote tags |
tag has-local |
Show repos that have local tags |
tag has-remote |
Show repos that have remote tags |
remote |
Show remote URLs |
prune |
Prune stale remote-tracking branches |
gc |
Run git garbage collection |
checkout <branch> |
Checkout a branch across all repositories |
commit -m <msg> |
Commit all changes with a shared message |
submodule-update |
Update submodules recursively |
blame <file> |
Run git blame on a file (skips repos without it) |
grep <regexp> |
Grep across all repositories |
clean hard |
Hard-clean all repositories (git clean -ffxd) |
clean soft |
Remove untracked files only (git clean -fd) |
clean make |
Run make clean |
clean git |
Discard unstaged working-tree changes (git checkout .) |
clean cargo |
Run cargo clean (skip if no Cargo.toml) |
branch local |
Show local branches |
branch remote |
Show remote branches |
branch github |
Show GitHub default branch |
run <cmd> |
Run an arbitrary shell command across all repositories |
Build
| Command | Description |
|---|---|
build make |
Run make across all projects |
build rsconstruct |
Run rsconstruct build on projects with rsconstruct.toml |
build pydmt |
Run pydmt build across all projects |
build bootstrap |
Run bootstrap across all projects |
build venv-make |
Run make inside a virtualenv |
build venv-pydmt |
Run pydmt inside a virtualenv |
build pydmt-build-venv |
Run pydmt build_venv |
Other
| Command | Description |
|---|---|
complete <shell> |
Generate shell completion scripts |
version |
Print version information |
Global Options
| Option | Description |
|---|---|
-v, --verbose |
Print all projects, even when no action is taken |
--terse |
Terse output (suppress project headers) |
--stats |
Show statistics |
--no-output |
Suppress command output |
--print-not |
Print repos that do NOT match (invert selection) |
--glob <pattern> |
Glob pattern for discovering projects (default: */*) |
--no-glob |
Disable glob-based discovery |
--folders <list> |
Explicit comma-separated list of folders to operate on |
--no-sort |
Do not sort project list |
--no-stop |
Do not stop on errors |
Project Discovery
By default, rsmultigit looks for git repositories matching the */* glob pattern (two levels deep, e.g. org/repo). If no repos are found with */*, it automatically falls back to * (immediate subdirectories).
You can override this with:
--glob "myorg/*"— custom glob pattern--folders "repo1,repo2,repo3"— explicit list--no-glob— only scan immediate subdirectories
License
MIT