Read my book

I wrote books about Webpack and React. Check them out!

Friday, March 5, 2010

Fossil DVCS on the Go - First Impressions

I have been using Fossil DVCS (Distributed Version Control System) at work for a couple of weeks now. I thought it might be interesting to share some of first impressions of the system.

I came by Fossil while searching for a small self-contained and full featured version control system. I wanted something I can run easily portably from an USB stick. It's quite nice to have a development environment in your pocket. :)

Fossil seemed to fit my requirements fine. I did consider using darcs, git and Mercurial but I ended up testing Fossil just because it provides some interesting additional functionality not usually seen in DVCS systems.

Fossil is not just a DVCS, it contains a wiki, an issue tracker and a proper web interface as well! I don't think there are other DVCS's that can compete it in this regard. In this sense it has managed to find a nice little niche for itself.

I found the quickstart documentation quite instructive. It's a bit sparse. You might want to take a look at this page for further discussion on the basic concepts its built upon.

I was a bit confused about the meaning of "open" and "close" commands at first. Apparently "open" extracts the actual files from a repository and creates a local checkout while "close" gets rid of it [1].

In case you are using a repository set up on your portable device (USB stick, ie.) it's important to remember to "close" the repository once you are done with your development work. This will get rid of local checkout information (__FOSSIL__ file) and allow you to open the repository yet again later. If you forget to do this, it's possible that the local checkout points to the wrong place as the path to a portable device is not guaranteed. This may manifest itself as errors while trying to do something (ie. show the web UI, commit, ie.).

It's possible to fix this situation by getting rid of the aforementioned __FOSSIL__ file and by opening the repository again. Note that in case you have made some local changes you with to retain, you should use the --keep flag ("fossil open --keep").

I have found the lack of native support for recursive "add" on all platforms bit of a nuisance. Fortunately there appears to be a nice workaround for this. Anyway that's easy enough to fix properly with some scripting.

Overall I have found Fossil a nice little system that's surprisingly full featured. In case you happen to do portable development, check it out.