Manage your commonly used repos from YAML / JSON manifest(s). Compare to myrepos.

Great if you use the same repos at the same locations across multiple machines or want to clone / update a pattern of repos without having to cd into each one.

  • clone /update to the latest repos with $ vcspull
  • use filters to specify a location, repo url or pattern in the manifest to clone / update
  • supports svn, git, hg version control systems
  • automatically checkout fresh repositories
  • Documentation and Examples.
  • supports pip-style URL’s (RFC3986-based url scheme)

how to


$ pip install --user vcspull


add repos you want vcspull to manage to ~/.vcspull.yaml.

vcspull does not currently scan for repos on your system, but it may in the future

  flask: "git+"
  awesome: 'git+git://'
  libds: 'git+'
    repo: 'git+'
      tony: 'git+ssh://'

(see the author’s .vcspull.yaml, more examples.)

next, on other machines, copy your $HOME/.vcspull.yaml file or $HOME/.vcspull/ directory them and you can clone your repos consistently. vcspull automatically handles building nested directories. Updating already cloned/checked out repos is done automatically if they already exist.

clone / update your repos

$ vcspull

keep nested VCS repositories updated too, lets say you have a mercurial or svn project with a git dependency:

external_deps.yaml in your project root, (can be anything):

  sdl2pp: 'git+'

clone / update repos:

$ vcspull -c external_deps.yaml

See the Quickstart for more.

pulling specific repos

have a lot of repos?

you can choose to update only select repos through fnmatch patterns. remember to add the repos to your ~/.vcspull.{json,yaml} first.

The patterns can be filtered by by directory, repo name or vcs url.

# any repo starting with "fla"
$ vcspull "fla*"
# any repo with django in the name
$ vcspull "*django*"

# search by vcs + url
# since urls are in this format <vcs>+<protocol>://<url>
$ vcspull "git+*"

# any git repo with python in the vcspull
$ vcspull "git+*python*

# any git repo with django in the vcs url
$ vcspull "git+*django*"

# all repositories in your ~/code directory
$ vcspull "$HOME/code/*"

More information

Python support Python 2.7, >= 3.5
VCS supported git(1), svn(1), hg(1)
Config formats YAML, JSON, python dict
Test Coverage
Open Hub
License MIT.
git repo
$ git clone
install dev
$ git clone vcspull
$ cd ./vcspull
$ virtualenv .venv
$ source .venv/bin/activate
$ pip install -e .
$ py.test
$ vcspull