AA_guitar_fabio-pagani_123rf_46514708.jpg

© Fabio Pagani, 123RF

Mit dem Versionskontrollsystem Fossil Quellcode verwalten

Im Gleichklang

Fossil vereint Versionskontrolle, Wiki und Bugtracker zum Rundum-Wohlfühl-Paket für Software-Entwickler.

Tragen Teams aus Entwicklern und Anwendern Daten für den Programmcode und die Dokumentation einer Applikation gemeinsam zusammen und pflegen diese, dann sind Kollisionen im Rahmen dieser Kooperation vollkommen normal. Dabei passieren auch Fehler – etwa dass Inhalte auf mysteriöse Weise verloren gehen oder sich verändern. Daher kommt oft nachträglich der Wunsch auf, die Dateien zu revidieren und frühere Versionen wieder zu reaktivieren – mit anderen Worten: Archäologie vom Feinsten.

Das Verschicken einer Version als Anhang an eine Mail (und infolgedessen ein verstopftes Postfach) zählt zum Leidwesen vieler immer noch zum Alltag. So etwas lässt sich mit dem Einsatz eines geeigneten Versionkontrollsystems (VCS) verhindern, englisch "revision control system" (RCS) genannt. Darin verwalten Sie die gemeinsam bearbeiteten Dateien.

Ein solches System dient zum Erfassen von Änderungen an Dokumenten oder Dateien. Alle Versionen erhalten einen Zeitstempel und in der Regel eine Benutzerkennung. Neuere Varianten versehen die Daten zusätzlich mit einem Hash-Wert (siehe Kasten "Unterschiede"). Als Archiv kommt eine einzelne Datei, ein Verzeichnis oder eine Datenbank zum Einsatz. Daraus holen Sie bei Bedarf jede Version und Zustand des Archivs wieder zurück.

Der Sinn eines VCS besteht darin, nachzuvollziehen, wer wann welchen Inhalt geändert hat. Dazu gehört die Möglichkeit, diese Änderungen wieder vollständig rückgängig zu machen. Bei Office-Dokumenten heißt diese Funktion häufig "Änderungshistorie im Dokument". Ähnliches verwenden Wikipedia und viele Content-Management-Systeme.

So ermöglicht ein VCS eine nachvollziehbare Zusammenarbeit, insbesondere von unterschiedlichen Orten aus. Jeder Benutzer trägt etwas bei, sofern er Zugang zum verwendeten System besitzt. Das VCS repräsentiert den Entwicklungsstand und somit eine Version mit bestimmten Eigenschaften, wie bereits getestete und freigegebene Funktionen einer Software.

Es erlaubt das Freigeben einer bestimmten Version, während andere parallel daran weiterarbeiten. Verschiedene Zweige – benannt als Entwicklung oder Veröffentlichung mit Versionsnummer – erlauben ein Ausprobieren und späteres Zusammenführen von Programmcode der einzelnen Beitragenden.

Die Auswahl eines VCS hängt von der Anzahl der Beteiligten und von den Bedürfnissen im Projekt selbst ab. Klären Sie vorher, was Sie alles abdecken und welche weitere Software Sie daran andocken möchten. Das betrifft insbesondere die grundlegenden Komponenten wie Betriebssysteme. Zudem freuen sich Entwickler sehr, wenn Sie deren Gewohnheiten in der Arbeitsweise berücksichtigen. Das spätere Migrieren zu einem anderen System gestaltet sich mitunter recht aufwendig und nie konfliktfrei.

Dieser Beitrag rückt Fossil [1] ins Rampenlicht. Es verbindet ein VCS mit einem integrierten Wiki und einem Bugtracking-System. Von daher bricht es mit dem KISS-Prinzip [2], das die meisten Werkzeuge unter Linux bei der Konzeption als Maßstab anlegen. Können Sie mit dieser Einschränkung leben, erhalten Sie ein dezentral angelegtes, überschaubares und mächtiges Werkzeug, das ideal zu Projekten kleiner und mittlerer Größe passt.

Unterschiede

Von der Organisation unterscheidet man zwischen lokalen, zentralen oder dezentralen VCS. Lokal bedeutet hier eine Versionsverwaltung pro Datei, beispielsweise der aktuelle Inhalt und die Änderungen in einem einzigen Dokument. Diesen Ansatz verfolgen etwa das Source Code Control System (SCCS) [16] und das GNU Revision Control System (GNU RCS) [17].

Zentrale VCS greifen auf einen Server (Repository) zurück, der als alleinige Instanz fungiert. Alle anderen Programme nutzen das VCS dann als Client. Sämtliche Aktionen setzen den Zugriff auf den Server voraus. Dieses Prinzip kommt beim Concurrent Versions System (CVS) [18] und bei Subversion (SVN) [19] zum Einsatz.

Dezentral beschreibt das gleichwertige Verteilen der Inhalte – jede Instanz dient quasi als Server. Die Teilnehmer synchronisieren die Daten nach Bedarf untereinander, die Methode erfordert aber keinen permanenten Zugriff. Das erleichtert das unabhängige Arbeiten ohne permanenten Zugang zum Netzwerk. Git [20], Fossil und Mercurial [21] arbeiten nach diesem Prinzip.

Einstieg in Fossil

Fossil gehört zur Klasse der dezentral organisierten VCS. Sie können auch eine Instanz nutzen, die als Server fungiert, müssen das aber nicht tun. Um die einzelnen "Commits" (Änderungen) beim Zusammenführen (Synchronisieren) den verschiedenen Instanzen zuzuordnen, referenziert Fossil jede Änderung über einen Hash (siehe Kasten "Hash-Wert berechnen").

Hash-Wert berechnen

Hash-Funktionen zählen zu den kryptografischen Verfahren. Sie dienen unter anderem dazu, Prüfsummen zu berechnen. Unter Linux stehen dazu Werkzeuge wie Md5sum (MD5 mit 128 Bit), Sha1sum (SHA1 mit 160 Bit), Sha224sum (SHA2 mit 224 Bit), Sha256sum (SHA2 mit 256 Bit), Sha384sum (SHA2 mit 384 Bit) und Sha512sum (SHA2 mit 512 Bit) zur Verfügung. Die Ziffernfolge bezeichnet üblicherweise die Länge des resultierenden Hash-Werts in Bits, wobei MD5 und SHA1 eine Ausnahme darstellen. Verfügt das System, das Sie verwenden, über keines der genannten Programme, greifen Sie stattdessen auf Openssl zurück, das ebenfalls Hash-Werte berechnet.

Wie jedes VCS kommt Fossil am besten mit zeilenorientiert abgelegten ASCII-Daten zurecht – etwa Programmcode, HTML und CSS, Texte, Konfigurationsdateien und Notizen. Änderungen ordnen Sie über eine Zeilennummer zu. Bei anderen Daten – übersetzter Programmcode, Bilder und komprimierte Dateien wie Zip-Archive – helfen spezielle Erweiterungen wie Git-annex [3] weiter [4].

Fossil richtet sich an einzelne Entwickler und Teams bis mittlerer Größe. Im Fokus stehen insbesondere Gruppen, die zur Pflege der einzelnen Werkzeuge über keine große Manpower verfügen. Hierin liegt auch der Grund dafür, dass Fossil neben dem VCS noch ein Wiki, ein Bugtracking-System sowie eine Funktion zum Hinterlegen von Notizen ("Technical Notes") mitbringt. Letztere verbinden Sie mit einem Zeitpunkt und verwenden das als Ankündigung, Blog-Eintrag oder Meilenstein. Fossil verlinkt die Notiz automatisch über das Wiki.

Dabei vereint eine einzige Programmdatei alle genannten Funktionen miteinander. In der Programmiersprache C geschrieben, fällt sie sehr kompakt aus und bringt nicht mehr als 2 MByte kompilierten Code auf die Waage. Als DEB-Paket findet sich Fossil in den Repositories von Debian, Ubuntu und deren Ablegern. Alternativ beziehen Sie ein spezifisches ZIP-Archiv von der Webseite des Projekts, um Fossil unter Linux, MacOS, OpenBSD oder Windows einzuspielen.

TIPP

Möchten Sie Fossil testen, ohne es lokal aufzusetzen, empfiehlt sich ein Blick auf Chisel [5]: Als Analogon zu Github [6] bietet es ebenfalls freie Repositories – nur statt mit Git eben mit Fossil als Basis.

Zum Speichern der versionierten Daten stützt Fossil sich auf die Datenbank SQLite [7], zu der es auch komfortable grafische Verwaltungsoberflächen gibt [8]. Auf Wunsch im- und exportiert das Tool die verwalteten Daten samt Historie von und zu Git.

Nach der Installation benutzen Sie Fossil über die Kommandozeile. Haben Sie bereits mit einem anderen VCS wie Git gearbeitet, finden Sie sich schnell zurecht. Der Aufruf folgt dem Schema aus Listing 1. Praktische Beispiele zeigt die Tabelle "Fossil vs. Git". Alternativ zur Kommandozeile steht eine integrierte Schnittstelle via Web bereit, daneben existieren grafische Benutzeroberflächen für Fossil.

Dazu gehören etwa Fuel [9], Fossil-GUI [10] für Mac OS X, Jurassic-Fossil [11] und QL-Fossil [12]. Die beiden Letzteren nutzen Java beziehungsweise C und haben bereits etwas Staub angesetzt. Keines der Programme steht derzeit für Debian oder Ubuntu als Paket bereit, es finden sich lediglich vereinzelt ältere Varianten für Arch Linux.

Listing 1

$ fossil Kommando|Schalter Aktion Repository

Fossil vs. Git

Aktion Fossil-Kommando Git-Kommando
Repo öffnen fossil open reponame git checkout
Datei hinzufügen fossil add Datei git add Datei
Datei entfernen fossil rm Datei git rm Datei
Datei umbenennen fossil mv Datei1 Datei2 git mv Datei1 Datei2
Änderungen einbuchen fossil commit -m "Änderungsnachricht" git commit und git push
Änderungen aus dem Repo holen fossil pull git pull
Lokale Änderungen fossil sync git push; git pull
Status anzeigen fossil status git status
Veränderungen anzeigen fossil diff Datei git diff Datei
Update fossil update
Überschreiben fossil checkout
Repo schließen fossil close

In der Praxis

Als ersten Schritt bei der Arbeit richten Sie ein neues Repository ein (Listing 2, erste Zeile). Dabei legt das Programm eine Projektdatei mit dem Namen des Repositorys im aktuellen Verzeichnis an, als Format verwendet es eine SQLite-Datenbank. Fossil vergibt hierbei eine Projekt- und eine Repository-ID, außerdem generiert es für das Repo den administrativen Benutzer admin mit einem zufälligen Passwort (Abbildung 1).

Abbildung 1: Mit einem einzigen Befehl legen Sie ein neues Repository an.

Listing 2

$ fossil init Repository
$ fossil user list -R Repository
$ fossil user password User Passwort -R Repository
$ fossil server -P Port Repository

Von Anfang an erhalten neben admin auch die Benutzer anonymous, developer, nobody und reader Zugriff auf das Repository. Sofern Sie nicht das Admin-Menü in der webbasierten Bedienoberfläche benutzen, erhalten Sie die Liste der Benutzer über den Befehl aus der zweiten Zeile von Listing 2.

Es gibt keine Möglichkeit, bestehende Benutzer aus dem Repository zu löschen – Sie dürfen nur deren Zugang einschränken. Fossil interpretiert einen Benutzer als gesperrt, sobald er ein leeres Passwort besitzt. Um das Passwort zu ändern, verwenden Sie das Kommando aus Listing 2, Zeile 3. Beachten Sie, dass hier die Kombination aus Benutzername und Passwort im Klartext in der Historie der Kommandozeile verbleibt. Das VCS selbst speichert dagegen nur den SHA1-Hash des Passworts in der Datenbank im Repository.

Haben Sie ein neues Repository angelegt, bedarf dieses noch des Feintunings. Über einen Webbrowser greifen Sie darauf zu und nehmen weitere Einstellungen vor. Dazu starten Sie Fossil zunächst als Webserver (Listing 2, Zeile 4). Geben Sie im Aufruf den Schalter -P (Langform --port) nicht an, nutzt Fossil automatisch den TCP-Port 8080 und lässt sich über HTTP erreichen. Die lokale Webseite rufen Sie demnach über die URL http://localhost:8080 auf. Bei Bedarf nutzen Sie aber die Kombination HTTPS/SSL zur sicheren Kommunikation.

Im Browser erfolgt das weitere Setup des Projekts, nachdem Sie sich als Benutzer mit den oben vergebenen Zugangsdaten angemeldet haben. Von den dort vorhandenen Feldern sind für das Projekt drei Dinge essenziell: die Vergabe eines Namens für das Projekt, die Beschreibung sowie ein Home-Verzeichnis. Darüber setzt Fossil einen Pfad zusammen, mit dessen Hilfe Sie später auf das Wiki, den Bugtracker und die Tickets zugreifen.

Über die Leiste zur Navigation, die Sie bei Bedarf individuell zusammenstellen, verwalten Sie Benutzer und Rechte oder greifen auf die erfolgten Commits, die einzelnen Dateien im Repository sowie die Verzweigungen ("Branches") zu. Abbildung 2 stellt die Sichtbarkeit eines Commits samt dessen Metadaten dar. Diese Anzeige fällt umso ausführlicher aus, je mehr Änderungen im Projekt erfolgt sind.

Abbildung 2: Über das Webinterface schauen Sie im Browser die Informationen zu einem Commit an.

Grundlegend folgt die Arbeit mit dem Programm folgendem Ablauf: Zunächst öffnen Sie ein Repository (fossil open), danach beziehen Sie die möglichen Änderungen (fossil pull) und synchronisieren diese mit dem lokalen Tree (fossil update). Anschließend nehmen Sie Änderungen vor (fossil add, fossil rm, fossil mv, fossil commit), synchronisieren diese (fossil sync) und schließen am Ende das Repository wieder (fossil close).

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Suse-Pakete schneller installieren mit Y2pmsh
    Wer mit Yast unter Suse 10.1 Software installieren möchte, sollte es nicht allzu eilig haben, denn das Programm arbeitet ziemlich langsam. Schneller geht's mit Y2pmsh, der Command Line Shell für Yast.
  • Neues auf den Heft-DVDs
    Nur mit dem optimalen System und der richtigen Software nutzen Sie das volle Potenzial Ihres Rechners. Mit der Heft-DVD erhalten Sie nicht nur topaktuelle Distributionen, sondern auch die passenden Programme zu den Artikeln.
  • Lebendes Fossil
    Debian blickt nicht nur auf eine lange Tradition zurück, sondern ist auch Mutter vieler Distributionen wie Ubuntu.
  • Angetestet
    Schlanker Webserver Filed 1.20, System-Info-Tool Neofetch 1.8, Dokumentenverwaltung Zeal 0.3.1, Echtzeit-Komprimierer Zstd 1.1.0.
  • Tastenlos
    Dasher erlaubt, mit etwa Übung auch ohne Tastatur flüssig zu schreiben – etwa per Maus, mit dem Finger auf einem Touchpad oder für Menschen mit Handicap via Mund- oder Augensteuerung.
Kommentare

Infos zur Publikation

LU 10/2017: Daten retten & sichern

Digitale Ausgabe: Preis € 8,50
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 2 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...