<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\documentclass[11pt,a4paper]{article}
% save as utf-8-emacs-unix

% language support
\usepackage[german]{babel}
%\usepackage{german}
\usepackage[utf8]{inputenc} % can use Umlauts now Ã¼ instead of "u

\usepackage{url} % \url{} \path{} with correct "hyphenation"
\parindent=0pt
\begin{document}

\title{Fossil --- Quellcodearcheologie}
\shorttitle{Fossil --- Quellcodearcheologie}
\author{Carsten Strotmann}

\maketitle

\begin{abstract}\itshape
Bei jedem langlebigen Softwareprojekt kommt irgendwann der Zeitpunkt, an dem der Entwickler in die Vergangenheit reisen mÃ¶chte, um im Quellcode der Vergangenheit
auf die Suche zu gehen: nach Fehlern, die sich unerkannt eingeschlichen haben; nach Funktionen, die in der Vergangenheit noch funktionierten oder nach dem 
einfachen Algorithmus, der doch viel besser war als der neue, clevere. In diesem Zeitpunkt freut sich der Entwickler, welcher den Quellcode seit Anbeginn in einer
Softwareversionsverwaltung hat ... wenn er diese denn hat ... 
\end{abstract}

\begin{figure*}[b]
\begin{center}
\includegraphics[width=\textwidth]{2012-01/fossil1}
\caption{\label{fossil1}Die \emph{Timeline}--Ansicht in der Fossil--Web--OberflÃ¤che}
\end{center}
\end{figure*}

\begin{figure*}[t]
\begin{center}
\includegraphics[width=\textwidth]{2012-01/fossil2}
\caption{\label{fossil2}Die Detail--Ansicht fÃ¼r ein \emph{Artifact} in der Fossil--Web--OberflÃ¤che}
\end{center}
\end{figure*}

\begin{multicols}{2}

% --------------------------------------------------------------------
\section{Softwareversionsverwaltung}
\label{sec:intro}
Auch der unorganisierteste Entwickler betreibt `Ad--Hoc'--Versionsverwaltung. Diese `Ad--Hoc'--Versionsverwaltung hat viele Gesichter, und wir alle habe diese
schon selbst benutzt: Die mit Datumsstempel versehene Kopie des Quellcode-Verzeichnisses, die ZIP--Datei, die mehr oder weniger regelmÃ¤ÃŸig auch als Datensicherung
erstellt wird: {\small\texttt{software-v2-20120220.zip}}.

`Ad--Hoc'--Versionsverwaltung ist nicht optimal, die Suche nach Ã„nderungen und auch der Vergleich von Versionen ist manuell und mÃ¼hsam. 
Kommerzielle-- und auch Open--Source--Versionsverwaltungssysteme wie CVS, SVN, git oder Mercurial bieten eine ganze Reihe von Funktionen, 
sind aber umfangreiche Programmpakete, in die sich der Entwickler erst einarbeiten muss. ZusÃ¤tzlich werden noch Webserver benÃ¶tigt, eine spezielle Scriptsprache
ist Bedingung fÃ¼r die Installation, und schnell ist ein Tag vergangen. Zu viel Aufwand fÃ¼r den Forth--Entwickler, er will ja schlieÃŸlich die kostbare Zeit 
benutzen, um Forth zu schreiben, nicht um Softwareversionsverwaltung zu lernen.



\section{Fossil}
\label{sec:Fossil}

Die Software--Versionsverwaltungssoftware Fossil [1] 
% \footnote{\url{http://fossil-scm.org}} 
hebt sich wohltuend von den Ã¼brigen 
SCM\footnote{Source--Code--Management}--Werkzeugen ab und ist ganz im Forth-Sinne klein und effizient. Das fÃ¤ngt schon damit an, dass die Fossil--Installation 
eine einzelne ausfÃ¼hrbare BinÃ¤rdatei ist (fossil.exe unter Windows, fossil unter Unix/MacOS). Keine Installations-Prozedur erforderlich, sondern das Programm wird
einfach an die Stelle auf der Festplatte kopiert, wo man sie denn haben mÃ¶chte, und fertig. Die Fossil--Webseite bietet ausfÃ¼hrbare Dateien fÃ¼r Linux, MacOS X und
Windows, und den Quellcode zum Download an. Zum Betrieb von Fossil wird keine weitere Software benÃ¶tigt, kein Webserver, keine Scriptsprache muss installiert sein,
nur die Fossil--Programmdatei genÃ¼gt.

\section{Erste Schritte}
\label{sec:erste Schritte}

Alle Quellcode--Dateien und die Ã„nderungen an diesen Dateien, sowie alle anderen Metadaten, die Fossil speichert, werden pro Projekt in einer einzigen
Datei gehalten, dem Projekt--Repository. Technisch gesehen ist das Projekt--Repository eine SQLite--Datenbank, aber dieser technische Hintergrund ist fÃ¼r die
Benutzung von Fossil unwichtig.

Wenn wir ein neues Softwareprojekt unter Quellcodeverwaltung nehmen wollen, so mÃ¼ssen wir erst eine Repository--Datei erstellen. Die Repository--Datei kann in
einem beliebigen Verzeichnis stehen, und kann auch spÃ¤ter ohne Probleme umherkopiert oder auf einen anderen Rechner Ã¼bertragen werden.

Ein Repository wird erstellt mit {\small\texttt{fossil new &lt;projektname&gt;}}. Nicht nur Quelltexte fÃ¼r Programmiersprachen kÃ¶nnen mit SCM--Systemen verwaltet werden,
sondern auch Texte fÃ¼r die VD. FÃ¼r diesen Artikel habe ich ein Repository namens `vd-201201-fossil' angelegt: 

\newpage

\begin{footnotesize}
\begin{verbatim}
# fossil new vd-201201-fossil
project-id: 071e05233e84654cc573cf79f6df21ebb05a24fa
server-id:  1dd3462892e01ecbaf62abd48de714d394328bb4
admin-user: cas (initial password is "abf70a")
\end{verbatim}
\end{footnotesize}

Um mit einem Repository arbeiten zu kÃ¶nnen, mÃ¼ssen wir dieses Ã¶ffnen:

\begin{footnotesize}
\begin{verbatim}
# fossil open vd-201201-fossil
\end{verbatim}
\end{footnotesize}

Der Befehl `fossil info' gibt uns Informationen Ã¼ber das gerade geÃ¶ffnete Repository:

\begin{footnotesize}
\begin{verbatim}
# fossil info
project-name: &lt;unnamed&gt;
repository:   /home/cas/Documents/vd-201201-fossil
local-root:   /home/cas/Documents/
project-code: 071e05233e84654cc573cf79f6df21ebb05a24fa
checkout:     efc57e6bf2a94a74096cbd27a7860e2dae21bb24 
              2012-02-22 02:30:22 UTC
tags:         trunk
comment:      initial empty check-in (user: cas)
\end{verbatim}
\end{footnotesize}

Zum Anfang ist das Repository noch leer, wir mÃ¼ssen die Dateien hinzufÃ¼gen, die wir gerne in der Quellcodeverwaltung haben mÃ¶chten. Hierzu dient der 
Fossil--Befehl 
`add'. Mit `add' kÃ¶nnen einzelne Dateien, aber auch ganze DateibÃ¤ume hinzugefÃ¼gt werden. Wird dem `add'--Befehl ein Verzeichnis gegeben, so wird dieses Verzeichnis
inklusive aller Unterverzeichnisse unter die Quellcodeverwaltung gestellt. In Falle des VD--Artikels ist es nur eine Datei:

\begin{footnotesize}
\begin{verbatim}
# fossil add   fossil.tex
ADDED  fossil.tex
\end{verbatim}
\end{footnotesize}

Die Datei `fossil.tex' ist nun unter der Versionkontrolle, aber noch nicht in der Repository--Datenbank gespeichert. Erst wenn wir die Datei per `commit' 
das erste Mal in das Fossil--System Ã¼bernehmen, wird die Datei in das Repository gespeichert:

\begin{footnotesize}
\begin{verbatim}
# fossil commit -m "Erste Version des fossil-Artikels"
New_Version: caf95931d089baaaef35cc70783613712da21c1b
\end{verbatim}
\end{footnotesize}

Jede Ã„nderung an einem Repository bekommt eine eindeutige kryptografische Checksumme, diese wird als Versionsnummer ausgegeben. Mit der Option `-m' wird ein
Kommentar zu dieser Ã„nderung angegeben. Wird `-m' weggelassen, so fragt Fossil nach einem Kommentar auf der Kommandozeile.

Nach ein paar Ã„nderungen im Quellcode erfolgt ein weiterer Commit:

\begin{footnotesize}
\begin{verbatim}
# fossil commit -m "Zweiter Commit"
New_Version: df0007f5e7259144b73dd98497d419a7f63f22b7
\end{verbatim}
\end{footnotesize}

Somit haben wir nun zwei Versionen des Artikels in der Datenbank. Der Befehl `timeline' gibt eine Ãœbersicht der Ã„nderungshistorie mit den Kommentaren:

\begin{footnotesize}
\begin{verbatim}
# fossil timeline
=== 2012-02-22 ===
02:48:05 [df0007f5e7] *CURRENT* Zweiter Commit 
                      (user: cas tags: trunk)
02:41:46 [caf95931d0] Erste Version des fossil-Artikels 
                      (user: cas tags: trunk)
02:30:22 [efc57e6bf2] initial empty check-in 
                      (user: cas tags: trunk)
\end{verbatim}
\end{footnotesize}

Der Befehl `diff' gibt die Ã„nderungen zwischen den Versionen im Repository aus. Mit `fossil help diff' bekommt man die Hilfe zum `diff'--Befehl angezeigt. Mit dem 
Befehl `revert' kann zu einem frÃ¼heren Zeitpunkt in der Quellcode--Historie zurÃ¼ckgekehrt werden.

Es ist gefahrlos mÃ¶glich, ein Repository geÃ¶ffnet zu halten, auch wenn der Rechner neu gestartet wird. Nur wenn das Repository verschoben oder auf einen
anderen Rechner kopiert werden soll, sollte das Repository vorher mit `fossil close' geschlossen werden. Vor einem `close' erst noch alle Ã„nderungen
an den Quelldateien per `commit' in die Datenbank Ã¼bernehmen. Der Befehl `help' gibt eine Liste aller Fossil--Befehle aus, und `fossil help &lt;Befehl&gt;' gibt
eine Beschreibung des Befehls aus.

\section{Fossil Web-OberflÃ¤che}
\label{sec:Fossil Web-OberflÃ¤che}

Neben der Kommandozeilenschnittstelle bietet Fossil auch eine Web--OberflÃ¤che auf Port 8080 der Loopback--Adresse. Dieser Webserver wird mit `fossil server' 
gestartet. Im Web--Browser unter der URL http://localhost:8080/ befindet sich dann die KonfigurationsoberflÃ¤che fÃ¼r Fossil. Neben dem Projektnamen kÃ¶nnen Ã¼ber diese 
OberflÃ¤che die Sicherheitseinstellungen fÃ¼r das Repository vorgenommen werden (wenn Fossil als Webserver Ã¼ber das Internet betrieben wird), und die 
Web--OberflÃ¤che enthÃ¤lt auch ein Bug--Tracking--System um Fehler--Reports zu verwalten, sowie ein einfaches Wiki--System, welches zur Dokumentation des Projektes 
verwendet werden kann.


Fossil zeigt, dass auch mÃ¤chtige Quellcode--Verwaltungssysteme nicht kompliziert zu installieren und bedienen sein mÃ¼ssen. Ein Fossil--Repository ist in wenigen 
Minuten erzeugt, Zeit, die spÃ¤ter hundertfach durch die Funktionen des Systems wieder eingespart werden kann. Mit Fossil gibt es keine Ausreden mehr, 
Software--Versionsverwaltung sollte fÃ¼r jedes Projekt eingesetzt werden.
\end{multicols}

\section*{Links}

[1] \url{www.fossil-scm.org} Fossil Homepage

\vfill
%Bild: Gondwana_fossil_map_ger.png
\begin{figure*}[h]
\begin{center}
\includegraphics[width=1.0\textwidth]{2012-01/Gondwana_fossil_map_ger}
\caption{\label{bild1}Lage der Fossilien, daher RÃ¼ckschluss auf Gondwana\newline
Quelle: \url{http://commons.wikimedia.org/wiki/File:Gondwana_fossil_map_ger.png}}
\end{center}
\end{figure*}
\vfill


\end{document}
</pre></body></html>