After decades of making do with plain old files and directories, I recently bit the bullet and decided to put my programming projects under version control.
Since I tend to work alone, mostly with fairly small code bases, I think almost any of the extant version control systems would fit my needs nicely. After looking at various alternatives, the system I ended up installing was Fossil SCM.
Well, you don't really install Fossil so much as copy a single executable file to your hard drive and be done with it. An 800 kB executable in fact, and that's for a full blown DVCS!
But wait, there's more to see inside the package. Fossil has an integrated issue ticket system and a wiki, and somehow they also managed to shoehorn a browser-based user interface, together with a web server to run it on. Personally, the issue ticketing part is not something I need right now. I do occasionally use the integrated wikis to jot down ephemeral stuff, but in the main my proper notes still go into project specific org-mode files. But it's still reassuring to know that these extras are present, and seemingly not bloating up Fossil.
Over 4 months of continual usage, the only real inconvenience I've faced with it has been the need to manually resolve merge conflicts. Fossil, as opposed to, say, Git, doesn't include a tool to assist in conflict resolution although I gather this is being looked into.
A shallow excavation
Here is a sequence of Fossil commands for carrying out some very elementary source code management:
- Create a new repository (maintained as a single archive file) with myself as admin user:
> fossil new repo.fossil -A ikram
- Open the repository to start (or resume) working on the project (effectively, checks out the latest version of the repository's contents into the current directory):
> fossil open repo.fossil
- Launch the UI inside a web browser window (displaying branch graph, version diffs, etc. and enabling wiki editing, ticket submission, user management, etc.):
> fossil ui &
- Register a new file (one that already exists) for addition to the repository:
> fossil add prog.lisp
- After editing some files, commit all changes (this will cause an external editor to prompt for the commit message):
> fossil commit
- End the session:
> fossil close


