Use git-global to keep track of all the git repositories on your machine.
This is a Rust program that you can install with cargo install git-global.
(To obtain cargo and Rust, see https://rustup.rs.) Once installed, you gain
an extra git subcommand that you can run from anywhere to check up on all your
git repos: git global.
Use git global <subcommand> to:
git global info: show meta-information about git-global itself
(configuration, number of known repos, etc.)git global list: show list of all known reposgit global scan: update the cache of known repos by searching your
filesystemgit global staged: show status of the git index for repos with such changesgit global stashed: show stashes for all repos that have themgit global status: show git status -s for all your repos with any changesgit global unstaged: show status of the working directory for repos with
such changesIn addition to config-file-based options, there are a set of global command-line flags that take precedence:
--json: Print subcommand results in a JSON format.--untracked: Show untracked files in subcommand results, e.g., for the
status, staged, and unstaged subcommands.--nountracked: Don't show untracked files in subcommand results, e.g., for
the status, staged, and unstaged subcommands.To change the default behavior of git-global, you can do so with --- wait for
it --- git's global
configuration!
To set the root directory for repo discovery to something other than your home
directory:
git config --global global.basedir /some/path
To add patterns to exclude while walking directories:
git config --global global.ignore .cargo,.vim,Library
The full list of configuration options supported in the global section of
.gitconfig is:
basedir: The root directory for repo discovery (default: $HOME)follow-symlinks: Whether to follow symbolic links during repo discovery
(default: true)same-filesystem: Whether to stay on the same filesystem as basedir
during repo discovery
(on Unix or Windows only)
(default: true on Windows or Unix, false otherwise)ignore: Comma-separated list of patterns to exclude while walking
directories (default: none)default-cmd: The default subcommand to run if unspecified, i.e., when
running git global (default: status)show-untracked: Whether to include untracked files in output (default:
true)The following are some ideas I've had about future subcommands and features:
git global dirty: show all repos that have changes of any kindgit global branched: show all repos not on master (TODO: or a different
default branch in .gitconfig)git global duplicates: show repos that are checked out to multiple placesgit global remotes: show all remotes (TODO: why? maybe filter by hostname?)
git global add <path>: add a git repo to the cache that would not be found in a scan
git global ignore <path>: ignore a git repo and remove it from the cachegit global ignored: show which git repos are currently being ignoredgit global monitor: launch a daemon to watch git dirs with inotifygit global pull: pull down changes from default tracking branch for clean repos
stream results to STDOUT as the come in (from git global status, for
example, so we don't have to wait until they're all collected)
locate .git if the DB is populated, instead of walking the filesystemSubcommand traitstatus subcommandstagedstashedunstageddefault-cmdshow-untrackedfollow-symlinkssame-filesystem--untracked--nountrackedtrue by default. (Thanks, pka!)GitGlobalConfig to Config.GitGlobalResult to Report.get_repos find_repos, and cache_repos functions to Config.core module into config, repo, and report.