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
: showgit status -s
for all your repos with any changesgit global unstaged
: show status of the working directory for repos with such changes
In 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 thestatus
,staged
, andunstaged
subcommands.--nountracked
: Don't show untracked files in subcommand results, e.g., for thestatus
,staged
, andunstaged
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 asbasedir
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 runninggit 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 kind -
git global branched
: show all repos not onmaster
(TODO: or a different default branch in .gitconfig) -
git global duplicates
: show repos that are checked out to multiple places -
git 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 cache -
git global ignored
: show which git repos are currently being ignored -
git global monitor
: launch a daemon to watch git dirs with inotify -
git global pull
: pull down changes from default tracking branch for clean repos -
stream results to
STDOUT
as the come in (fromgit global status
, for example, so we don't have to wait until they're all collected) -
use
locate .git
if the DB is populated, instead of walking the filesystem -
make a
Subcommand
trait -
do concurrency generically, not just for the
status
subcommand
- 0.3.2 (2020-11-13)
- Update dependencies.
- 0.3.1 (2020-04-25)
- Update dependencies.
- 0.3.0 (2019-08-04)
- Add subcommands:
staged
stashed
unstaged
- Add config options:
default-cmd
show-untracked
follow-symlinks
same-filesystem
- Add command-line flags:
--untracked
--nountracked
- Add options to follow symlinks and stay on the same filesystem while
scanning directories; both are
true
by default. (Thanks, pka!)
- Add subcommands:
- 0.2.0 (2019-03-18)
- Include untracked files in status output.
- Expand documentation and package metadata.
- Update and change several dependencies.
- Add some tests.
- Several public API changes, such as:
- Rename
GitGlobalConfig
toConfig
. - Rename
GitGlobalResult
toReport
. - Move
get_repos
find_repos
, andcache_repos
functions toConfig
. - Split the
core
module intoconfig
,repo
, andreport
.
- Rename
- Merge bug fix for scanning directories when nothing is configured to be ignored (#1).
- 0.1.0 (2017-01-31)
- Initial release with these subcommands: help, info, list, scan, status.