Version control with Fossil
Within a year or so after the nearly simultaneous debuts of Git, Mercurial, and Bazaar in 2005, another distributed version control system (DVCS) was introduced called Fossil. Unlike the other three, Fossil has maintained a much lower profile. A recent announcement that Tcl/Tk would be moving from the SourceForge CVS repositories to Fossil raised that profile a bit. So, what is Fossil and what distinguishes it from the other choices in the DVCS space?
Fossil was created by D. Richard Hipp, who also created SQLite, and its
first release was in 2006. Since that time, a number of projects have
started using Fossil for source code management, including, unsurprisingly,
SQLite, but also
the Mongrel2 web
server, the PRITLOG blog
system, and now Tcl/Tk. Others are undoubtedly using it as well, but as
the project's "Questions
and Criticism" page notes, "fossil does not yet have the massive
user base of git or mercurial
".
To start with, Fossil is more than just a DVCS, it also includes bug tracking, wiki, and blog, all of which are set up for distributed operation. It is, in some ways, an integrated project management system like Trac, but it has a different set of features that are meant to satisfy Hipp's requirements. He worked on an earlier project (CVSTrac) that inspired Trac, but Fossil is clearly an effort to scratch his particular set of itches. It would seem that other projects are starting to find that it works for them as well.
One of the main differences from Trac, and one that will be very familiar to DVCS users, is the idea of disconnected operation. But, beyond the usual ability to edit and commit code that a DVCS provides, Fossil allows editing bug tickets or changing the wiki locally, then synchronizing those changes to other repositories at a later time. Disconnected operation is the "killer feature" that Fossil provides over Trac, at least for Hipp's purposes.
But Fossil has some other characteristics that will be attractive to some. It is a single monolithic binary (fossil) that handles all of the source code management tasks, without using any external programs (like diff or patch). That binary also handles web requests for source code browsing, bug ticket handling, and repository synchronization. Because it is standalone, it can be easily installed in its own chroot() environment to isolate it from the rest of the system. Monolithic may give the wrong impression, however, as the binary is only around 800K in size.
All of the data is stored in SQLite (again, no surprise there) in what Hipp
calls an enduring
file format: "A fossil repository is intended to be readable,
searchable, and extensible by people not yet born.
" The current
implementation uses deltas and zlib-compressed blobs stored in the SQLite
database. Like other DVCS programs, Fossil uses SHA1 hashes to identify
the "artifacts" that are stored in the repository.
Unlike other DVCSs, Fossil has a repository that is stored separately from the working tree, rather than as hidden directories like the default for Git or Mercurial. Also unlike those systems, Fossil's repository is just a single SQLite file that can be easily copied or moved as needed. A working directory is associated with a specific Fossil repository (in a specific location), in some ways like the "origin" concept in Git.
Typically, each developer has their own repository on their local machine with one or more local source trees (or working directories) associated with it. Repositories can be synced with each other via HTTP. There are two different modes of operation for syncing, "manual-merge" mode (which is the way that Git and Mercurial work) or "autosync" mode (which is similar to how CVS and Subversion (SVN) work). One of the interesting aspects of Fossil is that it supports both of these modes.
In autosync mode, a commit essentially also does a push to the server where the code was cloned from or the one that was most recently used to sync. Then one uses the "update" command to pull the most recent changes into the local repository and to merge them into the local source tree. Manual-merge mode just decouples the commit from push, and update from pull so that users need to do each of those parts separately (and indeed can do those parts separately). The documentation says that the author believes autosync to be the proper default (in the "4.0 Workflow" section of the Fossil Concepts page):
Since many projects using DVCS are often running in disconnected mode (at least conceptually), it makes sense that Git, Mercurial, and others only support the manual-merge style. Fossil would seem to be targeted more at smaller projects, with fewer developers, possibly all working for the same company on a single project. In some ways, it is targeted at replacing CVS or SVN with a distributed tool while more-or-less preserving the workflow that those tools provide.
One thing that cannot be said about Fossil is that it lacks for documentation. There is voluminous documentation of Fossil including its design philosophy, a technical overview, a Quick Start Guide, a comparison to Git, and more, all found linked from the main Fossil project page. There is even an 87-page User Manual available in both PDF and Fossil repository format. There should be very few barriers to getting going with Fossil.
In some ways, Fossil sits in between the VCS and DVCS worlds. For projects
that like the idea of keeping their bugs and wiki together with their code
(and documentation), Fossil is definitely worth a look.
Posted Mar 17, 2011 6:35 UTC (Thu)
by elanthis (guest, #6227)
[Link] (7 responses)
At least not in the world where you have non-programmers (like designers) working on files and who aren't ever, ever going to use a command line for anything, or for primarily Windows-based shops with hordes of "i need Intellisense to tell me how to code" developers (or hordes of "I can code without Intellisense, but why in god's name would I want to?").
Posted Mar 17, 2011 10:24 UTC (Thu)
by tcourbon (guest, #60669)
[Link]
You don't really believe the world is that manichean, don't you ?
Posted Mar 17, 2011 14:50 UTC (Thu)
by HelloWorld (guest, #56129)
[Link] (4 responses)
Posted Mar 18, 2011 16:12 UTC (Fri)
by smitty_one_each (subscriber, #28989)
[Link] (3 responses)
Posted Mar 18, 2011 17:08 UTC (Fri)
by HelloWorld (guest, #56129)
[Link] (2 responses)
Posted Mar 18, 2011 17:31 UTC (Fri)
by nybble41 (subscriber, #55106)
[Link]
http://cedet.sourceforge.net/ - Collection of Emacs Development Environment Tools
Posted Mar 19, 2011 20:27 UTC (Sat)
by quotemstr (subscriber, #45331)
[Link]
Posted Mar 18, 2011 18:45 UTC (Fri)
by Tet (guest, #5433)
[Link]
I've been using various source control systems for over 20 years now, and I haven't yet found a need for either of those things...
Posted Mar 17, 2011 16:04 UTC (Thu)
by chrish (guest, #351)
[Link]
Posted Mar 18, 2011 14:09 UTC (Fri)
by vonbrand (subscriber, #4458)
[Link] (2 responses)
What bothers me is that it is described as "everybody has everything", that can't really be true in a truly distributed environment (see (PDF) Brewer's CAP theorem, which shows that under very mild conditions it is impossible to have Consistency, Availability and Partition tolerance at the same time; unfortunately this is what is usually demanded as "obvious base requirements" of distributed systems). Furthermore, it is said to be suited only for projects that aren't as large as the Linux kernel. Bad news is that that particular project started as a one-man hobby... I've seen too many successful projects starting out with tools "good enough for our limited use", which outgrew them and landed in a world of pain.
Posted Mar 18, 2011 16:54 UTC (Fri)
by akupries (guest, #4268)
[Link]
Posted Oct 4, 2011 20:14 UTC (Tue)
by topher (guest, #2223)
[Link]
Regarding the project size, your comparison is more than a little misleading. Yes, Linux started as a one-man hobby. But, from it's outset, it was a Unix-like Operating System Kernel. It's obvious that it has the potential to be a huge project. It's also probably one of the largest single pieces of software out there (where largest is defined as being larger than 99% of software projects by lines of code and number of developers). Most projects that most people are involved with are, by their nature and design, simply lacking in the potential to ever get that big. In that unlikely (probably 1 in 100,000+) chance that a project does unexpectedly get that big, Fossil supports import and export to Git. So you export your source history to Git, and you keep on going with your (monstrously huge) project.
Posted Mar 18, 2011 23:16 UTC (Fri)
by daglwn (guest, #65432)
[Link] (1 responses)
I have a number of projects in git and I would like to do distributed bug tracking. Fossil isn't really appropriate because the projects are medium-to-large and really want private branches by default.
Posted Mar 20, 2011 18:49 UTC (Sun)
by Velmont (guest, #46433)
[Link]
uWiki was started for Lumiera in order to have a distributed wiki that could live inside the git-repository for Lumiera itself. And also make it damn easy (wiki-like) to make small patches to the code itself.
Having a distributed bug database has also always been in the plans, but we're still working on the problem of having the web sites and wiki with documentation clonable and easily updateable on the open web.
But how nice it'd be when you can just clone one repository and have *all* the needed information with you.
Version control with Fossil
Version control with Fossil
Version control with Fossil
Version control with Fossil
Version control with Fossil
Version control with Fossil
http://ecb.sourceforge.net/ - Emacs Code Browser
Version control with Fossil
It's not a real SCM until it has a Windows Explorer add-in and a Visual Studio add-in.
Version control with Fossil
Bazaar Also Has "Autosync"
Version control with Fossil
Version control with Fossil
Version control with Fossil
Distributed Bug Tracking
Distributed Bug Tracking