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
subcommanddirs
and app_dirs
crates with directories
.staged
stashed
unstaged
default-cmd
show-untracked
follow-symlinks
same-filesystem
--untracked
--nountracked
true
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
.