mrh - Multi-(git)Repo Helper
This repo provides a library that allows crawling a directory and its children for Git repos. It reports if those repos have:
- uncommitted changes
- unpushed commits
- outdated branch
- added files
- deleted files
- renamed files
- untracked files (can be disabled)
- uncommitted repos (can be disabled)
- untagged HEAD (optional)
- unpushed tags (optional)
- unpulled tags (optional)
- unfetched commits (optional)
It also offers a command line tool with all those features, one of which is to show all repos:
$ mrh foo (uncommitted changes, untracked files, unpushed commits) bar baz (untracked files) qux
Only show those repos that are pending action:
$ mrh --pending foo (uncommitted changes, untracked files, unpushed commits) baz (untracked files)
Ignore untracked files in results:
$ mrh --pending --ignore-untracked foo (uncommitted changes, unpushed commits)
Include repos whose HEAD commits are not tagged:
$ mrh --pending --ignore-untracked --untagged-head foo (uncommitted changes, unpushed commits, untagged HEAD) bar (untagged HEAD)
Check which repos have unfetched commits, a relatively slow operation when the remote is on the network:
$ mrh --access-remote ssh-key qux (unfetched commits)
For cases where JSON or YAML output is desired,
--output-yaml flags, respectively.
- Ignores unreadable files/directories without warning
- Ignores bare git repositories
You will need to first install a few packages before you can build mrh. On Debian/Ubuntu, here how you do:
apt install cmake libssl-dev pkg-config gcc
These are needed by
which itself is ultimately needed by the git2 crate.
Proceed to build and install mrh (assuming you have the Rust toolchain installed):
cargo install mrh
JSON and YAML output formats are behind feature flags:
cargo install mrh --features "yaml json"
NOTE: minimum required rustc is v1.21, due to use of Iterator::for_each by structopt.
For library usage, check them API docs.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.