myrepos is an excellent tool for applying
git operations to multiple repositories, and I use it extensively.
Given a configuration file like this:
.. [github.com/skx/asql] checkout = git clone email@example.com:skx/asql.git [github.com/skx/bookmarks.public] checkout = git clone firstname.lastname@example.org:skx/bookmarks.public.git [github.com/skx/Buffalo-220-NAS] checkout = git clone email@example.com:skx/Buffalo-220-NAS.git [github.com/skx/calibre-plugins] checkout = git clone firstname.lastname@example.org:skx/calibre-plugins.git ...
You can clone all the repositories with one command:
mr -j5 --config .mrconfig.github checkout
Then pull/update them them easily:
mr -j5 --config .mrconfig.github update
It works with
git repositories, mercurial, and more. (The
-j5 argument means to run five jobs in parallel. Much speed, many fast. Big wow.)
I wrote a simple golang utility to use the github API to generate a suitable configuration including:
- All your personal repositories.
- All the repositories which belong to organizations you're a member of.
Currently it only supports github, but I'll update to include self-hosted and API-compatible services such as gitbucket. Is there any interest in such a tool? Or have you all written your own already?
(I have the feeling I've written this tool in Perl, Ruby, and even using curl a time or two already. This time I'll do it properly and publish it to save effort next time!)