Fossil: A tiny, easy and feature-packed project management solution
Fossil is a software configuration management system. Fossil is software that is designed to control and track the development of a software project and to record the history of the project. There are many such systems in use today. Fossil strives to distinguish itself from the others by being extremely simple to setup and operate.
-- from Fossil Concepts
Imagine an SCM
-- easy, CSV or SVN
...a distributed SCM
-- Git?
...with a bugtracking system and an integrated wiki
-- Github, pretty much
...with a web interface and a web server
-- Definitely Github
...all in a single precompiled file (less than 800KB, available for Windows, Mac and Linux)
-- ...you what?
Welcome to the world of Fossil. When I wrote my thesis on version control system, you had to install CVS or SVN, and they had a central repository on a server somewhere.
Then I discovered Git, and the wonderful world of distributed VCSs: no central repository anymore, so you could host your own repository on your own local machine, provided that you installed Git first, (portable versions are available though). Fossil is a distributed VCS, but you don't need to install anything on your machine. All you need to do is to download a single file. Everything you need is right there, in under 800KB (on Windows, but of course Mac and Linux versions are available, too). It uses SQLite as main storage everything, from your code commits to Wiki pages.
While this can scare some folks, keep in mind that Fossil was created by the author of SQLite itself, so they definitely know how to use the popular single-file database properly. If you're still not convinced, you should definitely read about Fossil reliability and performance.
Getting Startedfossil new test
This command creates a new fossil repository named test. It also creates an administrative user (named after your username on your computer) with a temporary password. fossil ui test
This command starts the server on port 8080 and opens a browser window on http://127.0.0.1:8080. What you see is a web page similar to the Fossil site, where you're kindly asked to head over to /setup_config to configure your project. User ManagementFossil comes with full-fledged user management. You can add, edit, remove users and change their privileges and access rules. Unfortunately in my short test the logout link didn't seem to work, and I was unable to login as a different user... but I'm confident that this issue will be addressed.
While this can scare some folks, keep in mind that Fossil was created by the author of SQLite itself, so they definitely know how to use the popular single-file database properly. If you're still not convinced, you should definitely read about Fossil reliability and performance.
Getting Startedfossil new test
This command creates a new fossil repository named test. It also creates an administrative user (named after your username on your computer) with a temporary password. fossil ui test
This command starts the server on port 8080 and opens a browser window on http://127.0.0.1:8080. What you see is a web page similar to the Fossil site, where you're kindly asked to head over to /setup_config to configure your project. User ManagementFossil comes with full-fledged user management. You can add, edit, remove users and change their privileges and access rules. Unfortunately in my short test the logout link didn't seem to work, and I was unable to login as a different user... but I'm confident that this issue will be addressed.
WikiFossil comes with a bare bones -- but functional -- wiki. It supports special markup for creating lists and links, and you can use HTML for everything else, and as all respectable Wikis, Fossil Wiki supports history and diff between two consecutive versions.
Additionally, you can use the wiki for "embedded documentation": if you put a .wiki file anywhere within your project, it will be accessible through Fossil UI.For more information, see Wiki in Fossil.
TicketsThe integrated ticketing system is again pretty basic but does the job. You can obsiously create, edit, delete tickets and display them. Now, the neat thing is that if you don't like the way tickets are displayed, you can change the SQL query used to generate a ticket list. For more information, see Bug Tracking in Fossil.
Basic VCS usageHere's a simple fossil session showing how to use the basic commands to manage the source code of your project.> cd test_project
> fossil open ../test> fossil add test.rb
ADDED test.rb
> fossil info
project-name: Test Project
repository: D:/Temp/fossil/test
local-root: D:/Temp/fossil/test_project/
user-home: : C:/Documents and Settings/ita12311/Application Data
project-code: 091a4156135671783d93da715c3be525cc3eec92
server-code: f6e913439853c30303173ca10f5235a66b51125c
checkout: b527a6344058d427132e61b68956ee2a4eff0b1c 2009-12-21 08:00:19 UTC
tags: trunk> fossil status
repository: D:/Temp/fossil/test
local-root: D:/Temp/fossil/test_project/
server-code: f6e913439853c30303173ca10f5235a66b51125c
checkout: b527a6344058d427132e61b68956ee2a4eff0b1c 2009-12-21 08:00:19 UTC
tags: trunk
ADDED test.rb> fossil commit
notepad "D:/Temp/fossil/test_project/ci-comment-660FA25BB2C2.txt"
'gpg' is not recognized as an internal or external command,
operable program or batch file.
unable to sign manifest. continue (y/N)? y
New_Version: 8124462472b4afeec8f799531f702ebf92f069d2 > fossil status
repository: D:/Temp/fossil/test
local-root: D:/Temp/fossil/test_project/
server-code: f6e913439853c30303173ca10f5235a66b51125c
checkout: 8124462472b4afeec8f799531f702ebf92f069d2 2009-12-21 08:55:40 UTC
parent: b527a6344058d427132e61b68956ee2a4eff0b1c 2009-12-21 08:00:19 UTC
tags: trunk
> fossil diff test.rb
--- test.rb
+++ test.rb
@@ -1,7 +1,11 @@
class Test
def test_method
puts "Hello World!"
+ end
+
+ def another_test_method
+ puts "Goodbye!"
end
end> fossil close
Final Thoughts
Although Fossil has been used successfully for some very respectable real-world projects, obviously I won't abandon Git anytime soon. Although it really appeals me in terms of portability and centralized solution (as in "everything in one place": code, documentation and tracking) it is still a bit basic in terms of functionality compared to other VCS (that are only VCSs), wikis or tracking systems. I'll definitely use it whenever I need to plug-in a versioning system to a directory containing documents or code snippets, for example. Or even just as a personal wiki or bug tracking system: it's excellent even if you don't need a versioning system!

