fcommit is a cross platform graphical commit tool for use with Fossil repositories. It provides a simple to use interface for the typical everyday activities of a developer using Fossil.

Features include:

fcommit doesn't strive to provide all the features provided by the Fossil command line, or to duplicate features in the Fossil browser interface. Features provided by fcommit are expanded on below.


fcommit is still in development. However, a development version is provided here for Linux and for Windows. The downloads are provided as single file executables. After downloading the executable for your system, place it in your PATH. The executables are named according to version and platform, so before using the executable you may want to change its name to plain fcommit. To uninstall, just delete the executable from your system.

fcommit is an open source project. See the project files for license information.


fcommit has dialogs to create a new empty repository and to clone a new local repository from an existing repository.

The Create Empty Repository dialog has a field for the name (and path) of the Fossil repository to create. The dialog also has a field for user ID for the newly created repository.

The Clone Repository dialog has fields for the URL of the remote repository, name (and path) of the local repository, and user ID.

Once you have your local repository you can check out a source tree with the New Source Tree dialog. Use the New Source Tree dialog by selecting a local repository, and then a version of the source code either by branch, tag, or version ID hash code. A drop down combo box will display all branches and tags available when selecting by branch or tag. Finally specify a directory to put the checkout.

Checkout Status

The fcommit GUI shows current status for a Fossil checkout. You can switch between different checkouts by using the Change Directory or the Recent menu items in the main menu.

Checkout status is shown in five tabs, showing any files that are tracked and have been modified, any extra files in the checkout that are not currently tracked, any tracked files that have been renamed, any tracked files that have been deleted, and any missing tracked files that have yet to be categorised as renamed or deleted.

Files listed in the Modified tab will be checked in at the next commit, unless they are right clicked and selected for exclusion.

Extra files will not be checked in at the next commit, unless the are right clicked and selected for adding.

The last three tabs, Renamed, Deleted, and Missing, are related. With Fossil you are free to delete or rename tracked files in a checkout using a file manager or command line. If you do so these files will be displayed in the Missing tab. From there you can select listed files and specify that they have been renamed, and what they have been renamed to, or specify them as being deleted. Renamed files will be moved from the Missing tab to the Renamed tab. Deleted files will be moved from the Missing tab to the Deleted tab. Then at the next commit, renamed and deleted files will be recorded accordingly in the new checkin.

A diff of any modifications made to a checkout can be displayed by clicking on the diff button in the toolbar. Also the history of the current checkout's repository can be viewed in the fcommit History dialog by clicking on the history button in the toolbar. Diffs for versions in the repository can be viewed by clicking on links in the History dialog.

Committing Changes

When committing changes you can decide to commit to the same branch or to commit to a new branch. To commit to a new branch click on the Commit-to menu button, select New Branch in the drop down menu that appears, then enter the name of the new branch in the dialog that is displayed.

Type in a checkin comment and then press the Commit button. A summary dialog will appear. Once you've read the summary and want to proceed, press the summary dialog commit button to confirm.

If autosync is enabled when committing, Fossil will check for outstanding changes in the remote repository. If there are changes in your branch then a fork would occur, and so the commit will fail. In this instance update your checkout (see next section) before committing again.

Updating, Switching and Merging Checkouts

Toolbar buttons are provided for updating a checkout, switching a checkout to a different version, and for merging changes in a different branch in the local repository into a checkout.

Note that the action of these three toolbar buttons can be undone by using the Undo menu item in the fcommit menu. And any undo can also be redone with the Redo menu item. There is just one level of undo/redo however.

The Update Checkout button will update a checkout with any outstanding changes on the same branch in the local repository. The update will occur such that any modifications in the checkout will still exist after the update.

If autosync is enabled, before performing an update to a checkout a pull from the remote repository will occur, to ensure the local repository isn't missing any changes in the remote repository.

The Switch Checkout button displays the Switch Checkout dialog for changing the current checkout to a different version in the local repository. The version to change to can be selected by branch, tag, or version ID. For branch and tag a combo box is displayed so that the branch or tag can be typed in or selected from a drop down list. For version ID the ID can be typed in, or if a version is selected in the history dialog prior to clicking the Switch Checkout button, the selected ID will be copied to the Switch Checkout dialog when it's opened.

Similar to updating a checkout, any changes in a checkout before switching to a different checkout will be maintained in the new checkout.

You can merge into a checkout with the Merge dialog.

With the Merge dialog you can merge a complete branch or just a range of checkins on a branch. For a range of checkins select one of the merge options that includes a baseline. You can also select a range of checkins for merging in the history dialog before pressing the Merge into Checkout button. Then the selected IDs will be filled in the Merge dialog for you.

Pull and Push

With autosync enabled, pull to local repository and push from local repository occur automatically. However, pull and push can also be done manually, and two toolbar buttons are provided for this purpose.

Other Features

On the toolbar there is a Refresh button to refresh the GUI to the status of a checkout.

Use the View -> Diff menu item to view a diff between two checkins. If two IDs are selected in the history dialog before viewing the Diff dialog, the IDs will be filled in the Diff dialog when it's displayed.

A browser interface for a repository can be viewed using the View -> Browser Interface menu item. If in a checkout, the repository entry in the View Browser Interface dialog that appears will initially be set to the repository for the checkout.

A command log window can be viewed with the View -> Command Log menu item. The command log shows interactions with Fossil, with commands to Fossil shown in blue and the responses from Fossil shown in black. What's shown is what you would see if you were using Fossil with a command line. The command log can also be viewed by pressing Ctrl-L, even when the GUI is busy with an operation.

Although autosync can be set with the Fossil browser interface, it can also be set through the Settings menu.

If there are files in your checkout that you would like to ignore, so that they don't appear in the Extras tab, the Settings -> Ignore Files menu item allows globs to be set to achieve this.

The URL of a remote repository can be viewed and edited by selecting Settings -> Remote URL from the main menu.

A local repository may be rebuilt by selecting Rebuild Repository from the main menu.

The version of Fossil that fcommit is using is shown in the About dialog, which can be displayed using the About menu item. fcommit will use the fossil executable in your PATH, unless you specify a fossil executable to use with the -bin command line argument when starting fcommit.