[Cheatsheet] Fossil version control software

=> Comment on Mastodon

Introduction

Fossil is a DVCS (decentralized version control software), an alternative to programs such as darcs, mercurial or git. It's developed by the same people doing sqlite and rely on sqlite internally.

=> Fossil official website

Why?

Why not? I like diversity in software, and I'm unhappy to see Git dominating the field. Fossil is a viable alternative, with simplified workflow that work very well for my use case.

One feature I really like is the autosync, when a remote is configured, fossil will automatically push the changes to the remote, then it looks like a centralizer version control software like SVN, but for my usage it's really practical. Of course, you can disable autosync if you don't want to use this feature. I suppose this could be reproduced in git using a post-commit hook that run git push.

Fossil is opinionated, so you may not like it if that doesn't match your workflow, but when it does, it's a very practical software that won't get in your way.

Fossil repository is a file

A major and disappointing fact at first is that a fossil repository is a single file. In order to checkout the content of the repository, you will need to run fossil open /path/to/repo.fossil in the directory you want to extract the files.

Fossil supports multiple checkout of different branches in different directories, like git worktrees.

Cheatsheet

Because I'm used to other versionning software, I need a simple cheatsheet to learn most operations, they are easy to learn, but I prefer to note it down somewhere.

View extra files

You can easily find non-versioned files using the following command:

## View changes

You can get a list of tracked files that changed:

Note that it only display a list of files, not the diff that you can obtain using fossil diff.

Commit

By default, fossil will commit all changes in tracked files, if you want to only commit a change in a file, you must pass it as a parameter.

## Change author name

=> More possibilities are explained in Fossil documentation

Add a remote

Copy the .fossil file to a remote server (I'm using ssh), and in your fossil checkout, type fossil remote add my-remote ssh://hostname//home/solene/my-file.fossil, and then fossil remote my-remote.

Note that the remote server must have the fossil binary available in $PATH.

Display the Web Interface

## Get changes from a remote

This is a two-step operation, you must first get changes from the remote fossil, and then update your local checkout:

fossil pull

fossil update

## Commit partial changes in a file

Fossil doesn't allow staging and committing partial changes in a file like with `git add -p`, the official way is to stash your changes, generate a diff of the stash, edit the diff, apply it and commit.  It's recommended to use a program named patchouli to select hunks in the diff file to ease the process.

=> https://www2.fossil-scm.org/home/doc/trunk/www/gitusers.md Fossil documentation: Git to Fossil translation

The process looks like this:

fossil stash -m "tidying for making atomic commits"

fossil stash diff > diff

$EDITOR diff

patch -p0 < diff

fossil commit

Proxy Information
Original URL
gemini://perso.pw/blog//articles/fossil-scm.gmi
Status Code
Success (20)
Meta
text/gemini
Capsule Response Time
140.260056 milliseconds
Gemini-to-HTML Time
0.667812 milliseconds

This content has been proxied by September (ba2dc).