Manage multiple git repos
Gita: a command-line tool to manage multiple git repos
This tool does two things
- display the status of multiple git repos such as branch, modification, commit message side by side
- delegate git commands/aliases from any working directory
If several repos need to be compiled against each other, it helps to see their status together. I also hate to change directories to execute git commands.
Here the colors denote the 5 situations between local and remote branches:
- white: local branch has no remote branch
- green: local branch is the same as remote branch
- red: local branch has diverged from remote branch
- purple: local branch is ahead of remote branch (good for push)
- yellow: local branch is behind remote branch (good for merge)
The additional status symbols denote
+: staged changes
*: unstaged changes
_: untracked files/folders
The bookkeeping sub-commands are
gita add <repo-path(s)>: add repo(s) to
gita rm <repo-name>: remove repo from
gita(won't remove repo from disk)
gita ls: display the status of all repos
gita ls <repo-name>: display the absolute path of one repo
gita -v: display gita version
Repo paths are saved in
$XDG_CONFIG_HOME/gita/repo_path (most likely
The delegated git sub-commands are of two forms
gita <sub-command> <repo-name(s)>with required repo name(s) input
gita <sub-command> [repo-name(s)]with optional input. And no input means all repos.
By default, only
pull take optional input.
Sub-commands with required input include
Delegation details are specified in
gita stat <repo-name(s)> is registered as
stat: cmd: diff --stat help: show edit statistics
git diff --stat.
If the delegated git command is a single word, the
cmd tag can be omitted.
gita push <repo-name(s)> is registered as
push: help: push the local updates
Custom git commands/aliases can be placed in
And they shadow the default ones in the case of name clashes.
If you want a custom command to behave like
gita fetch, i.e., to apply
command to all repos if nothing is specified,
allow_all option to be
For example, the following snippet creates a new command
gita comaster [repo-name(s)] with optional repo name input.
comaster: cmd: checkout master allow_all: true help: checkout the master branch
The superman mode delegates any git command/alias for specified or all repo(s). Usage:
gita super [repo-name(s)] <command/alias>
repo-name(s) is optional, and absence means all repos.
gita super myrepo1 commit -am 'fix a bug'executes
git commit -am 'fix a bug'for
gita super checkout masterputs all repos on the master branch (also see the customization example)
gita super frontend_repo backend_repo checkout new-featureputs the two chosen repos on the
Gita requires Python 3.6 or higher (due to the use of f-string).
To install the latest version, run
pip3 install -U gita
If development mode is preferred,
download the source code and run
pip3 install -e <gita-source-folder>.
In either case, calling
gita in terminal may not work,
then you can put the following line in the
alias gita="python3 -m gita"
For auto completion, download
and source it in
To contribute, you can
- report/fix bugs
- request/implement features
- star/recommend this project
To run tests locally, simply
Other multi-repo tools
I haven't tried them but I heard good things about them.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size gita-0.7.4.tar.gz (7.5 kB)||File type Source||Python version None||Upload date||Hashes View|