(Update: it works on windows, too, now: 1.1 is out)
All my life is stored in version control, basically. Several django applications, several websites, some personal stuff, my PhD thesis: everything is in subversion/mercurial/bzr/git. I just counted them: I’ve got 86 checkouts at the moment :-)
Doing an “svn up” or “hg pull -u” in all of them is boring. And re-building the whole set of checkouts on a fresh machine is hell. And I knew I was about to be changing jobs at the end of 2009. Which meant a change of laptop. Which meant I wrote a small program to manage my checkouts: checkoutmanager. A simple easy_install checkoutmanager is enough to install it.
The basis is a
~/.checkoutmanager.cfg configuration file:
# Sample config file. Different sections per base location # and version control system. Splitting everything all over # the place in multiple directories is fine. [recipes] # Buildout recipes I work on. vcs = svn basedir = ~/svn/recipes checkouts = svn://svn/blablabla/trunk svn://svn/another/trunk differentname http://host/yetanother/trunk https://host/yetanother/branches/reinout-fix [dotfolders] # Folders that end up as dotted configfolders in the root. # Note that there's a directory name behind the repository # location, separated by a space. vcs = bzr basedir = ~ checkouts = lp:emacsconfig/trunk .emacs.d sftp://somwhere/subversion/trunk .subversion
So you’ve got a couple of sections. Every section has a base directory where everything is placed. And a version control system: so one vcs per directory. And a couple of repository locations.
What I normally do every morning when I get to work is
up. This grabs the latest versions of all my checkouts from the server(s).
svn up for my subversion checkouts, a
hg pull -u for mercurial
and so on.
From time to time, I’ll do a
checkoutmanager st to show if I’ve got some
uncommitted files lying around somewhere. Very handy if you’ve worked in
several directories throughout the day: it prevents you from forgetting to
check in that one bugfix for a whole week.
A new project means I add a single line to my config file and run
Checkoutmanager allows you to spread your checkouts over multiple
directories. It cannot mix version control systems per directory, however.
As an example, I’ve got a
~/buildout/ directory with my big svn website
projects checked out there. And a directory with my svn work python
libraries. And a
~/hg/ dir with my mercurial projects. And I’ve made
checkouts of several config directories in my home dir, such as
~/.subversion and so on. Works just fine.
I’m real happy with checkoutmanager. It is simple and it works. What more can you ask for? So I invite you to try it. Just run “checkoutmanager” and you’ll get a full explanation and even a sample config file.
My name is Reinout van Rees and I work a lot with Python (programming language) and Django (website framework). I live in The Netherlands and I'm happily married to Annie van Rees-Kooiman.
Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):