Fossil, by
D. Richard HippFossil is a software configuration management (
SCM) system.
Disambiguation edit
"Fossil" is also the name of the filesystem in Plan 9 4th Edition [
1]. Plan 9 Fossil runs on top of Venti [
2] which indexes files and file fragments by their SHA-1 hash.
Response edit
- Fossil is different - it works very much on the "show your work" principle, rather than pretending that commits, up to and including point releases, sprang fully-armed from the forehead of Zeus.
- -- KBK ,on Git and Fossil, Tcl Chatroom ,2013-12-15
Features edit
- Bug Tracking And Wiki
- Web Interface
- Autosync
- Self-Contained
- Simple Networking
- CGI Enabled
- Robust & Reliable
Attributes edit
- license
- Fossil license page (Fossil was originally GPL licensed, but was changed in the first half of 2010.)
See Also edit
- Developing Tcl with Batteries Included
- how to access the Tcl fossil repositories
- Getting Started With Working On The Tcl/Tk Core
- Multiple Fossil Repositories as CGI at Apache2
Articles edit
- Version Control with Fossil, Jake Edge, 2011
Documentation edit
- Fossil Quickstart
- Fossil vs CVS Commands
- for people coming from CVS
- Import and Export
- converting between Fossil and git
- Branching, Forking, Merging, and Tagging
- fcommit
- fossil gui.
- fsl
- a script written in Tcl/Expect with the following features:
- Command aliasing and pre-processing
- Output filtering
- A number of preconfigured aliases, filters for colouring output
- fx aka fossil2git
- aka "Fossil eXtended" is a support tool providing additional repository management facilities not provided by core "fossil" itself. Among these are generation of ticket and other change notifications, mirroring with multiple copies of a project, export to git-mirrors, and more.
- Converting CVS to Fossil, by Hypnotoad
- Some notes and scripts to facilitate the process.
- SVN to Fossil, by Hypnotoad
- Ditto.
- reposurgeon
- enables risky operations that version-control systems don't want to let you do, such as editing past comments and metadata and removing commits. It works with any version control system that can export and import git fast-import streams, including git, hg, fossil, bzr, CVS, RCS, and src. It can also read Subversion dump files directly and can thus be used to script production of very high-quality conversions from Subversion to any supported DVCS. The original motivation for reposurgeon was to clean up artifacts created by repository conversions.
Description edit
Fossil 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.
Fossil stores content using an enduring file format in an
SQLite database so that transactions are atomic even if interrupted by a power loss or system crash. Furthermore, automatic self-checks verify that all aspects of the repository are consistent prior to each commit. In over three years of operation, no work has ever been lost after having been committed to a Fossil repository.
Setup of the bug-tracking subsystem is accomplished using a Tcl-like language called
TH1. Full bidirectional integration with full Tcl is also supported (must be enabled at compile-time and runtime).
Tips and Tricks edit
versionless link to a file
http://www.fossil-scm.org/fossil/artifact?filename=src/main.c&ci=trunk
and
http://www.fossil-scm.org/fossil/doc/trunk/src/main.c
override mime type
To override the mime type of a file when viewing the raw content, add the
m parameter to the query with a value of
text/plain standard merge
HaO 2013-05-28 (Info from
Jan Nijtmans):
There is a branch 'branch1', branched from trunk after the checkin with id 'checkin1'.
I merge it back to trunk when I am in a checkout of trunk:
% mkdir trunk
% cd trunk
% fossil open -R ../repository.fossil
% fossil merge branch1
merge to another branch
HaO 2013-05-28 (Info from
Jan Nijtmans):
Now I have another branch 'branch2' and I want to merge the changes within 'branch1' to this second branch.
So I go to a checkout of branch2 and try a merge:
% mkdir branch2
% cd branch2
% fossil open -R ../repository.fossil branch2
% fossil merge branch1
This does not work, as it will merge also all changes contained in 'checkin1', the origin of the branch 'branch1'.
% fossil undo
To limit the merged changes to the changes done in 'branch1', one must use the '--baseline' option:
% fossil merge --baseline checkin1 branch1
example
A practical example is to merge an msgcat bug fix in the branch 'bug3036566' into the trunk (e.g. tcl8.6) and into tcl8.5 (tag 'core-8-5-branch').
The bug branch was forked from trunk after checkin '76f6a1495e'.
% mkdir bug3036566
% cd bug3036566
% fossil open -R ../tcl.fossil
--- make modifications ---
% fossil commit -branch bug3036566 --branchcolor #ffc0c0
which looked after some modifications like that: [
3]
Now trunk was merged:
% mkdir trunk
% cd trunk
% fossil open -R ../tcl.fossil
% fossil merge bug3036566
--- test ---
% fossil commit
To merge the changes to tcl8.5 branch:
% mkdir core-8-5-branch
% cd core-8-5-branch
% fossil open -R ../tcl.fossil core-8-5-branch
% fossil merge --baseline 76f6a1495e bug3036566
--- test ---
% fossil commit
Merge two separate repositories
Use SQL to manually change the
project_code of one repo to exactly match the
project_code of the other. Then sync them. Caution: The change is irreversible.
Reference:
Tcl Chatroom log, 2014-08-19
Building Fossil 2.4 on Debian with Tcl integration
apt install tcl8.6 tcl build-essential libssl-dev zlib1g-dev;
wget -qO- http://fossil-scm.org/index.html/uv/fossil-src-2.5.tar.gz | tar xz;
cd fossil-2.5; ./configure --with-tcl=1 --with-tcl-private-stubs=1; make;
This will produce an executable fossil file in the present working directory.