Title: [Cheatsheet] Fossil version control software | |
Author: Solène | |
Date: 29 January 2023 | |
Tags: fossil versioning nocloud | |
Description: In this article, you will learn about the version control | |
software Fossil | |
# 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: | |
`fossil extras` | |
## View changes | |
You can get a list of tracked files that changed: | |
`fossil changes` | |
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. | |
`fossil commit` | |
## Change author name | |
`fossil user new solene@t470` and `fossil user default solene@t470` | |
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 | |
`fossil ui` will open your web browser and log in as admin user, you | |
can view the timeline, bug trackers, wiki, forum etc... Of course, you | |
can enable/disable everything you want. | |
## 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. | |
Fossil documentation: Git to Fossil translation | |
The process looks like this: | |
```shell | |
fossil stash -m "tidying for making atomic commits" | |
fossil stash diff > diff | |
$EDITOR diff | |
patch -p0 < diff | |
fossil commit | |
``` | |
Note that if you added new files, the "add" information is stashed and | |
contained in the diff. |