Versionsverwaltung mit Fossil

5. März 2015 · Programmierung · andreas · Kein Kommentar

Im privaten- oder Hobbybereich nur selten eingesetzt, kann eine Versionsverwaltung auch hier helfen den Überblick zu behalten. Egal, ob der Umfang über eine Hand voll Dateien oder die Skriptlänge über eine Bildschirmseite wächst - irgendwann führen temporär umbenannte Dateien und ge-zip-pte Versionen mehr zur Verwirrung denn dazu, im Falle eines Falles nochmal die letzte funktionierende Version rekonstruieren zu können.

Ein Blick auf einen der Big Player wie Git macht allerdings wenig Lust darauf, ein Versionsmanagement einzusetzen: alleine die Installion und Konfiguration wird mit ein bißchen Pech leicht zu einem Unterfangen, das die Größe des eigentlich zu verwaltenden Projekts deutlich übersteigt.

Als schlanke und sowohl einfach zu installierende als auch zu konfigurierende Alternative entpuppt sich Fossil, dessen Installation aus dem Herunterladen einer gepackten Datei besteht mit der dann dach dem Entpacken in einen beliebigen Ordner sofort losgelegt werden kann. Wer es etwas komfortabler haben will, entpackt die Datei irgendwo innerhalb des Suchpfades oder erweitert diesen um das Verzeichnis, in dem die ausführbare Fossil-Datei liegt.
Ein weiterer Vorteil von Fossil liegt darin, daß ein Fossil-Repository lediglich aus einer SQLite-Datenbank besteht, somit also im Bedarfsfall problemlos auf einen USB-Stick, Cloudspeicher (oder sonstwohin) kopiert und an einem anderen Ort weiterverwendet werden kann.

Anlegen eines Repositories

Als erstes sollte im aktuellen Arbeitsverzeichnis ein neuer Ordner angelegt werden, in dem die Fossil-Repositoies abgespeichert werden

D:\work>mkdir fossil

Dann kann ein Ordner für ein neues Projekt angelegt werden, in den dann gewechselt wird

D:\work>mkdir test
D:\work>cd test

und in dem die eigentliche Projektarbeit stattfindet.

Zuerst wird ein neues Repository angelegt. Der Name des Repositories inklusive Dateiendung kann hierbei frei gewählt werden

D:\work\test>fossil new d:\work\fossil\testprojekt.repo
project-id: 5c29b8981d9f5ec0aea2319c2cdb653e8054fcc3
server-id: df7d311a58b698b584fb7066435fd8e9bea19295
admin-user: andreas (initial password is "******")

womit die Vorbereitungen dann auch schon abgeschlossen sind.

Verwenden eines Repositories

Zum Verwenden eines Repositories wird dieses im aktuellen Arbeitsordner geöffnet:

D:\work\test>fossil open d:\work\fossil\testprojekt.repo
project-name: <unnamed>
repository: d:\work\fossil\testprojekt.repo
local-root: D:/work/test/
config-db: C:/Users/andreas/AppData/Local/_fossil
project-code: 5c29b8981d9f5ec0aea2319c2cdb653e8054fcc3
checkins: 0

In der Ausgabe werden nochmals die wichtigsten Aufgaben wie das aktuelle Repository, der aktuelle Arbeitspfad, sowie der letzte Checkin (in diesem Fall noch keiner) angezeigt.

Nun wird zuerst eine Textdatei mit dem Inhalt “Hallo Welt!” angelegt

D:\work\test>notepad hallowelt.txt

und diese dann dem Repository hinzugefügt

D:\work\test>fossil add hallowelt.txt
ADDED hallowelt.txt

Sollen gleich mehrere Dateien hinzugefügt werden, kann dies mittles “add .” erfolgen, was rekursiv den Inhalt des aktuellen Ordners inklusive eventuell vorhandener Unterordner dem Repository hinzufügt.

Nun wird eine zweite Textdatei mit dem Inhalt “Hallo zweite Welt!” angelegt und ebenfalls dem Repository hinzugefügt:

D:\work\test>notepad hallowelt2.txt
D:\work\test>fossil add hallowelt2.txt
ADDED hallowelt2.txt

Einen Überblick über die aktuellen Änderungen erhält man jederzeit über das “status”-Kommando

D:\work\test>fossil status
repository: d:\work\fossil\testprojekt.repo
local-root: D:/work/test/
config-db: C:/Users/andreas/AppData/Local/_fossil
ADDED hallowelt.txt
ADDED hallowelt2.txt

Damit die Arbeit auch ins Repository übernommen wird, muß am Ende des Arbeistschritts (oder Arbeitstages) ein “commit” erfolgen, wobei als Parameter noch ein Kommentar zur späteren Identifizierung übergeben werden sollte.

D:\work\test>fossil commit -m "Erste Version"
New_Version: 0dbde9bf70

Anschließend kann das Repository geschlossen werden

D:\work\test>fossil close

Die nächsten Schritte

Am nächsten Tag (oder wann immer die Arbeit weitergeht) wird das Repository wieder mittels “open” geöffnet:

D:\work\test>fossil open d:\work\fossil\testprojekt.repo
project-name: <unnamed>
repository: d:\work\fossil\testprojekt.repo
local-root: D:/work/test/
config-db: C:/Users/andreas/AppData/Local/_fossil
project-code: 5c29b8981d9f5ec0aea2319c2cdb653e8054fcc3
checkout: 0dbde9bf708a2a3e8e8c2eb00344b25f712f679d 2015-03-05 19:30:16 UTC
leaf: open
tags: trunk
comment: Erste Version (user: andreas)
checkins: 1

Nun wird die zweite Datei gelöscht und der Inhalt der ersten Datei in “Hallo Welt eins und zwei!” geändert.

D:\work\test>del hallowelt2.txt
D:\work\test>notepad hallowelt.txt

Anschließend wird der Status des Repositories überprüft

D:\work\test>fossil status
repository: d:\work\fossil\testprojekt.repo
local-root: D:/work/test/
config-db: C:/Users/andreas/AppData/Local/_fossil
checkout: 0dbde9bf708a2a3e8e8c2eb00344b25f712f679d 2015-03-05 19:30:16 UTC
leaf: open
tags: trunk
comment: Erste Version (user: andreas)
EDITED hallowelt.txt
MISSING hallowelt2.txt

Der Status “MISSING” weist darauf hin, daß Fossil das Fehlen der Datei “hallowelt2.txt” bemerkt hat, der Schritt aber innerhalb des Repositories noch nachgeholt werden muß

D:\work\test>fossil delete hallowelt2.txt
DELETED hallowelt2.txt

Nun wird eine dritte Datei erzeugt

D:\work\test>notepad hallowelt3.txt

Im Repository noch fehlende Dateien können mit Hilfe des “extra”-Befehls aufgelistet werden

D:\work\test>fossil extra
hallowelt3.txt

weshalb die Datei noch dem Repository hinzugefügt wird:

D:\work\test>fossil add .
ADDED hallowelt3.txt

Am Ende des zweiten Tages wird das Repository wieder geschrieben und anschließend geschlossen

D:\work\test>fossil commit -m "Erste Bearbeitung"
New_Version: 50bacbbe93
D:\work\test>fossil close

Weiterführendes Arbeiten

Einen kurzen Überblick über die aktuell gespeicherten Versionen kann jederzeit auf der Kommandozeile mit Hilfe des “timeline”-Befehls erzeugt werden

D:\work\test>fossil timeline --repository d:\work\fossil\testprojekt.repo
=== 2015-03-05 ===
19:37:01 [50bacbbe93] Erste Bearbeitung (user: andreas tags: trunk)
19:30:16 [0dbde9bf70] Erste Version (user: andreas tags: trunk)
+++ no more data (2) +++

Deutlich komfortabler ist allerdings die Übersicht über den eingebauten(!) Webserver von Fossil, der mittels

D:\work\test>fossil ui d:\work\fossil\testprojekt.repo
Listening for HTTP requests on TCP port 8080
Launch webbrowser: start http://localhost:8080/ &
Type Ctrl-C to stop the HTTP server

gestartet werden kann. Fossil öffnet anschließend mit dem Browser die Startseite des Repositories, auf dem komfortabel sowohl durch die einzelnen Stände navigiert wie auch Änderungen zwischen einzelnen Dateien genauer beleuchtet werden können.

Im Browser eröffnet sich dann auch die kompette Mächtigkeit, die in diesem “kleinen” Werkzeug liegt, denn falls das Projekt doch mal größer werden sollte, bringt Fossil neben einer Benutzerverwaltung auch gleich ein Ticket-System sowie ein eingebautes Wiki mit.