Skip to main content

Tool for managing remote repositories from your git CLI!

Project description


Control your remote git hosting services from the git commandline. The usage is very simple. To clone a new project, out of github, just issue:

% git hub clone guyzmo/git-repo

But that works also with a project from gitlab, bitbucket, or your own gitlab:

% git lab clone guyzmo/git-repo
% git bb clone guyzmo/git-repo
% git myprecious clone guyzmo/git-repo

If you want to can choose the default branch to clone:

% git lab clone guyzmo/git-repo master

Though sometimes, as you’re starting a new project, you want to create a new repository to push to:

% git hub create guyzmo/git-repo

actually the namespace is facultative, as per default you can (and want to) only create new repositories within your own account.

You might also want to add an existing remote ref to your workspace, and that can be easily done with:

% git lab add guyzmo/git-repo

Which will add as the gitlab remote!

Also, you can fork a repository using:

% git hub fork neovim/neovim

and of course, you can delete it using:

% git bb delete guyzmo/git-repo

Finally, you can open the repository’s page, using the open command:

% git lab open guyzmo/git-repo

*Nota Bene*: Thanks to ``git`` CLI flexibility, by installing
``git-repo`` you directly have acces to the tool using
``git-repo hub …`` or ``git repo hub …``. For the ``git hub …``
call, you have to set up aliases, see below how to configure that.

And as a bonus, each time it’s adding a new remote, it’s updating the all remote, so that you can push your code to all your remote repositories in one command:

% git push all master


You can get the tool using pypi:

% pip install git-repo

or by getting the sources and running:

% python3 install


To configure git-repo you need to tweak your ~/.gitconfig. For each service you’ve got an account on, you have to make a section in the gitconfig:

[gitrepo "gitlab"]
    private-key = YourVerySecretKey

[gitrepo "github"]
    private-key = YourOtherVerySecretKey

[gitrepo "bitbucket"]
    private-key = username:password

Here, we’re setting the basics: just the private key. You’ll notice that for bitbucket the private key is your username and password seperated by a column. That’s because bitbucket does not offer throw away private keys for tools (I might implement BB’s OAuth at some point).

You also have the ability to set up an alias:

[gitrepo "bitbucket"]
    alias = bit
    private-key = username:password

that will change the command you use for a name you’ll prefer to handle actions for the service you use:

% git-repo bit clone guyzmo/git-repo

Also, you can setup your own gitlab self-hosted server, using that configuration:

[gitrepo "myprecious"]
    type = gitlab
    private-key = YourSuperPrivateKey
    fqdn =

Finally, to make it really cool, you can make a few aliases in your gitconfig:

    hub = repo hub
    lab = repo lab
    bb = repo bb
    perso = repo perso

So you can run the tool as a git subcommand:

git hub clone guyzmo/git-repo


For development, I like to use buildout, and the repository is already configured for that. All you have to do, is install buildout, and then call it from the root of the repository:

% pip install zc.buildout
% buildout

and then you’ll have the executable in bin:

% bin/git-repo --help


  • [x] make a git-repo fork action
  • [x] make it possible to choose method (SSH or HTTPS)
  • [x] handle default branches properly
  • [x] make a nice way to push to all remotes at once
  • [ ] maybe using that trick:
  • [x] refactor the code into multiple modules
  • [ ] add support for handling gists
  • [ ] add support for handling pull requests
  • [ ] list them
  • [ ] fetch them as local branches
  • [ ] add OAuth support for bitbucket
  • [ ] show a nice progress bar, while it’s fetching
  • [o] add regression tests (and actually find a smart way to implement them…)
  • [x] added general tests without mockups
  • [ ] make mockup of requests and subprocess calls
  • for more features, write an issue or, even better, a PR!


Copyright ⓒ Bernard `Guyzmo` Pratz <>

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

See the LICENSE file for the full license.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for git-repo, version 1.5.0
Filename, size File type Python version Upload date Hashes
Filename, size git_repo-1.5.0-py3.5.egg (11.3 kB) File type Egg Python version 3.5 Upload date Hashes View
Filename, size git-repo-1.5.0.tar.gz (7.5 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page