'''[http://www.fossil-scm.org/%|%Fossil]''', by [D. Richard Hipp] Fossil is a software configuration management ([SCM]) system. ** Disambiguation ** "Fossil" is also the name of the filesystem in Plan 9 4th Edition [http://en.wikipedia.org/wiki/Fossil_%28file_system%29]. Plan 9 Fossil runs on top of Venti [http://en.wikipedia.org/wiki/Venti] which indexes files and file fragments by their SHA-1 hash. ** Response ** ''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 ** * Bug Tracking And Wiki * Web Interface * Autosync * Self-Contained * Simple Networking * CGI Enabled * Robust & Reliable ** Attributes ** license: [http://www.fossil-scm.org/index.html/doc/trunk/COPYRIGHT-BSD2.txt%|%Fossil license page%|%BSD(2)] (Fossil was originally GPL licensed, but was changed in the first half of 2010.) ** See Also ** [Developing Tcl with Batteries Included]: how to access the Tcl fossil repositories [Getting Started With Working On The Tcl/Tk Core]: ** Articles ** [http://lwn.net/Articles/432759/%|%Version Control with Fossil], Jake Edge, 2011: ** Documentation ** [http://www.fossil-scm.org/index.html/doc/tip/www/quickstart.wiki%|%Fossil Quickstart]: [Fossil vs CVS Commands]: for people coming from CVS [http://www.fossil-scm.org/xfer/doc/tip/www/inout.wiki%|%Import and Export]: converting between Fossil and [Git%|%git] [http://www.fossil-scm.org/index.html/doc/tip/www/branching.wiki%|%Branching, Forking, Merging, and Tagging]: ** Tools ** [http://core.tcl.tk/akupries/fossil-tools/index%|%fossil2git]: Support scripts to maintain a system for mirroring a set of fossil repositories to one or more git repositories ** Description ** 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 http://www.sqliteconcepts.org/THManual.pdf%|%TH1%|%. Full bidirectional integration with full Tcl is also supported (must be enabled at compile-time and runtime). ** Tips and Tricks ** *** Versionless Link to a File *** ======none http://www.fossil-scm.org/fossil/artifact?filename=src/main.c&ci=trunk ====== and ======none http://www.fossil-scm.org/fossil/doc/trunk/src/main.c ====== [HaO] 2013-05-28 (Info from [Jan Nijtmans]): *** Standard merge *** 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: ======none % mkdir trunk % cd trunk % fossil open -R ../repository.fossil % fossil merge branch1 ====== *** Merge to another branch *** 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: ======none % 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'. ======none % fossil undo ====== To limit the merged changes to the changes done in 'branch1', one must use the '--baseline' option: ======none % 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'. ======none % mkdir bug3036566 % cd bug3036566 % fossil open -R ../tcl.fossil --- make modifications --- % fossil commit -branch bug3036566 --branchcolor #ffc0c0 ====== which looked after some modifications like that: [http://core.tcl.tk/tcl/timeline?r=bug3036566] Now trunk was merged: ======none % mkdir trunk % cd trunk % fossil open -R ../tcl.fossil % fossil merge bug3036566 --- test --- % fossil commit ====== To merge the changes to tcl8.5 branch: ======none % 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 <> Application | Dev. Tools