Fossil: 101 Reasons Why Fossil Is Better Than Git
Fossil comes as a single self-contained executable file .<br>Install Fossil by copying "fossil" (or "fossil.exe") to someplace<br>on your $PATH (or %PATH%). Upgrade (or downgrade) by overwriting<br>that one file. Uninstall by deleting that one file.<br>A Git installation requires hundreds of files. You want to use<br>package manager to install, upgrade, or uninstall Git. If you<br>tinker with individual files of a Git installation, you run a high<br>risk of messing things up.
Fossil comes with a built-in full-featured web interface .<br>The Fossil web interface meets or exceeds the capabilities<br>of GitHub, GitLab, Gitea, Forgejo, and similar.<br>Some people think of Fossil as "GitHub-in-a-box".<br>Git has "gitweb", but that CGI program<br>is so limited and difficult to set up and use that few people<br>even know it exists, so I do not count it<br>for the purposes of this point.
You can run the Fossil web interface locally<br>using the "fossil ui" command.<br>Just type the command "fossil ui" from any Fossil checkout,<br>or add an argument that is the name of a Fossil repository file<br>or a directory that is the root of an open checkout<br>and Fossil automatically brings up a new window with the<br>Fossil web interface in your preferred web browser.<br>This works seamlessly on all platforms. There is nothing<br>extra to install. There is no configuration or setup.<br>It just works.
The Fossil web interface shows a graphical timeline of changes.<br>See, for example https://sqlite.org/src/timeline or<br>https://fossil-scm.org/home/timeline. Similar timeline features<br>for Git are available from the command-line for a local clone<br>(for example using "gitk" or other third-party programs), but<br>nothing with anything close to the capabilities of the Fossil<br>timeline is available via a web interface, as far as I know.<br>Using the web interface, one can easily check on the status<br>of a project when away from the office and without access to a clone<br>of the repository.
The Fossil web interface view of a single checkin shows a<br>context graph of all other directly connected checkins.<br>See the page for checkin 59985724d71229bf<br>for example. The context graph shows four other checkins:<br>two direct descendants, one merge descendant, and one ancestor.<br>This context graph is useful in understanding how a particular<br>checkin fits into the history of the project. The context graph<br>can also be used to step forwards or backwards in time, by<br>clicking on the "check-in:" hash links for nearby checkins.
The graphical timeline dynamically adjusts its layout as you resize<br>your browser window.<br>The server sends down an HTML page that contains (among other things)<br>a JSON object that gives the basic structure of the<br>timeline graph, then Javascript renders the graph. The JS code is<br>small, does not use any third-party frameworks, and is (by default)<br>appended to the HTML page. Except for a separate CSS file, the HTML<br>is completely stand-alone. The local<br>web browser isn't required to go gather lots of separate resources.
The graphical timeline works on a phone.<br>The graph layout automatically compresses on a small display, and<br>can seem a little cramped for a complex project. The timeline does<br>does look better on a desktop. Even so, the timeline display is<br>functional on a phone and it is very convenient<br>to be able to see what is happening on a project<br>while away from the office and without access to a laptop.
The graphical timeline is bandwidth efficient.<br>To display a timeline of recent activity on Fossil uses less<br>than 5% of the bandwidth as GitHub. In a typical example,<br>GitHub requires about 3.5MB of transfer to retrieve 56 different<br>resources compared to 150KB for just one HTML file and one CSS file<br>with Fossil. And for all that 3.5MB, GitHub only gives you a list<br>of recent check-ins without any indication of the branching<br>structure, whereas Fossil gives you an easy-to-read color-coded<br>graph.
The Fossil web interface makes it easy to see a diff between<br>any two checkins with just a couple of clicks.<br>On the timeline display, click on one node of the graph to<br>select it (a red dot will appear in the center of the node) and<br>then click on any other graph node, and Fossil will compute and<br>display a diff between those two check-ins. (Usage hint:<br>click the selected node a second time to deselect it.)
The Fossil web-based diff page shows the context of the two<br>checkins being diffed.<br>At the top of the web-based diff is a graph that shows<br>specifically the two checkins being diffed and the context<br>around them.<br>Example.<br>This helps to reduce any confusion about what you are looking at.
In Fossil, a repository is distinct from a working checkout.<br>A Fossil repository can be colocated with the working checkout, as<br>they are required to be in Git. But most people keep the repository<br>separate. One common pattern is to put all Fossil repositories in<br>a single directory named $HOME/Fossils or $HOME/Museum and then open<br>working checkouts against each repository whereever they are...