The name D. Richard Hipp is most likely familiar: he is the man who created
the immensely popular embedded database called SQLite, contained in
probably thousands of projects including, very possibly, your mobile phone. He
also created a version control system named Fossil. I've been looking at
Fossil a bit: a single binary (called
fossil) implements the client as well
as the server side of the version control system, and it adds a Wiki, a ticket
tracker, and a Web interface to the lot, as well as distributed version
control over HTTP (with proxy support). Let me briefly introduce you to
Fossil with an example, sort of the "hello world" of a version control
system. You can follow along with this after downloading the binary,
which BTW also exists for Windows.
$ cd $SOMEWHERE $ fossil new demo.fossil project-id: 7dee78d01d77151b6e2109724525b877d97c6b3d server-id: a296eb764ca24168e1a54167353a43e2a9fbf77c admin-user: jpm (initial password is "dad08c") $ fossil open demo.fossil $ vi README $ vi prog.c $ fossil add README *.c ADDED README ADDED prog.c $ export VISUAL=vi $ fossil commit New_Version: ae0864bfb4308af7aa22d0cf370cbffc3fa289c8
So far there is nothing particular spectacular. We've created a new
repository, and we "opened" that repository, thereby making it our default.
After creating a few files, I committed those files, and that's it. What is,
however, quite sexy is this. From within that same directory, launch the
(i.e. the user interface).
$ fossil ui
If all works well, this will have launched your Web browser onto an
HTTP server implemented by the
fossil binary. (If your Web browser doesn't
start, point it at
localhost:8080/index. If you look around the
interface, you'll see the individual features that Fossil has to
offer. What I can also do is to import a project from Git. As an example, I'll
use my couch-sdb project:
$ cd /path/to/git/repo $ git fast-export --all | \ fossil import /tmp/fos/couch-sdb.fossil Rebuilding repository meta-data... 100.0% complete... Vacuuming... ok project-id: 45c947fc821987201b034c2b55a5b852b55cba6e server-id: c0757fcd1b028e8d99c7de540183b60196e4b7d6 admin-user: jpm (password is "74c80c") $ cd /tmp/fos $ ls couch-sdb.fossil $ file couch-sdb.fossil couch-sdb.fossil: SQLite 3.x database $ fossil open couch-sdb.fossil README.md couchapp/_docs/foo.bar.json couchapp/_id couchapp/shows/bindzone.js couchapp/views/axfr/map.js src/couch-sdb.c src/couch-sdb.h zone.json project-name: <unnamed> repository: /private/tmp/fos/couch-sdb.fossil local-root: /private/tmp/fos/ project-code: 45c947fc821987201b034c2b55a5b852b55cba6e server-code: c0757fcd1b028e8d99c7de540183b60196e4b7d6 checkout: ce166d86752d740a7f8fde06529ce059c8f8bf3d 2010-10-11 15:07:41 UTC parent: 03e62d89edf085f4bbece538b8d1f1213fcc875a 2010-10-06 18:48:20 UTC tags: master comment: CouchApp design components (user: firstname.lastname@example.org) $ fossil ui
Let me show you the timeline: Fossil incorporates a a small Ticket tracker as well, which looks like this. Fossil isn't without criticisms, but I think it is a very robust package, and I feel it is particularly suited to environments that want to collaborate on projects, but which don't feel like setting up the usual and typically rather large number of prerequisites to do so (think: Apache, bug tracker, Wiki, etc.) Fossil's data store is SQLite but there is no reason to change that at some point in time.