Fossil is a software configuration management (SCM) system.
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).
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
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
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
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: [L3 ]
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
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
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.