Versionierung

Eine wissenschaftliche Arbeit, wie eine Diplom- oder Masterarbeit, schreibt man nicht an einem Tag, sondern meist über einen längeren Zeitraum. Neben dem eigentlichen Text gilt es noch eine Vielzahl weiterer Artefakte zu verwalten, wie etwa Abbildungen, Quellennachweise aber auch das Stichwortverzeichnis. Damit das nicht in völligem Wust endet, benutze ich seit Jahren die Versionsverwaltung Subversion, um meine verschiedenen Schreibprojekte zu verwalten. Zu Subversion gibt es eine sehr ausführliche Anleitung, die man auf alle Fälle nutzen sollte! Prinzipiell ist Subversion erst einmal nur ein Kommandozeilenprogramm, dass keine eigene grafische Oberfläche hat. Allerdings gibt es gerade für Windows diverse sehr gute grafische Benutzeroberflächen, etwa wie Tortoise SVN oder CrossVC.

Immer wenn ich einen größeren Arbeitsschritt beendet habe, etwa ein neues Kapitel, lege ich eine neue Version an. Weiterhin lege ich immer am Ende des Tages eine neue Version an, wenn es noch Änderungen gibt, die nicht in die Versionsverwaltung eingespielt wurden. Zu jeder Version gebe ich eine kurze Zusammenfassung der wichtigsten Änderungen ein. Dadurch kann ich relativ einfach die Entwicklung verfolgen und zum Beispiel zu einer alten Version zurückspringen.

Wichtig ist, dass man immer nur solche Dateien in eine Versionsverwaltung wie Subversion einspielen sollte, die man selber ändert, die aber nicht automatisch generiert werden. Dies sind bei einem Latex Projekt natürlich alle tex-Dateien und Abbildungen. Nicht in der Versionsverwaltung ablegen sollte man hingegen das erzeugte PDF sowie die diversen Logdateien, die Latex erzeugt (etwa die *.aux Datei). Bei Grafiken sollte man sich prinzipiell auch erst mal nur die Ausgangsdateien speichern. Allerdings ist es bei Grafiken oft recht aufwändig die finale PDF zu erzeugen, die dann in das Latex Dokument eingebunden wird. Deshalb lege ich solche Dateien meist doch in der Versionsverwaltung ab, obwohl ich sie jederzeit aus der Originaldatei erzeugen könnte.

Um die Übersicht zu wahren, sollte man auch nicht alle Dateien in einem einzigen Verzeichnis ablegen. Bei mir hat sich folgende Verzeichnisstruktur bewährt:

LATEX-PROJEKT
|-- tags
    `-- 2008-01-31-first_submission
        |-- cfp
        |   `-- re2008
        |-- diverses
        |-- latex
        |   `-- figures
        |       |-- abbildung1
        |       |-- abbildung2
        |       `-- abbildung3
        `-- template
            `-- ieee_cs_latex
`-- trunk
    |-- cfp
    |   `-- re2008
    |-- diverses
    |-- latex
    |   `-- figures
    |       |-- abbildung1
    |       |-- abbildung2
    |       `-- abbildung3
    `-- template
        `-- ieee_cs_latex

Im Verzeichnis Trunk liegt immer die Version, an der ich momentan arbeite. Wenn ich also das Paper weiterschreibe, dann passieren alle Änderungen in diesem Verzeichnis. Möchte ich mir einen bestimmten Zustand speichern, z. B. wenn ich ein Paper eingereicht habe, dann lege ich mir eine Kopie des Trunk Verzeichnis im Tags Verzeichnis mit dem Subversion Kommando svn copy an. Die Dateien im Tags Verzeichnis ändere ich nie. Sie dienen lediglich als Momentaufnahme. Man kann erkennen, dass ich mir neben den Latexdateien z. B. auch den Call for Papers und die zu verwendende Vorlage ablege. Je nach Projekt, kommen manchmal noch andere Dateien dazu.

Die eigentlichen Latexdateien liegen im Unterverzeichnis latex. Bei so kleinen Projekten wie einem Paper oder einer Diplomarbeit macht es relativ wenig Sinn, einzelne Kapitel nochmal über mehrere Verzeichnisse zu verteilen. Schreibt man hingegen ein ganzes Buch, dann kann dies schon sinnvoll sein.

Die Abbildungen lege ich unterhalb des Latex Verzeichnis in einen Unterordner figures. Je nachdem wie viele Grafiken es gibt, lege ich für jede Grafik nochmal einen eigenen Ordner an oder speichere alle Grafiken lediglich im Figures Verzeichnis.

Wie oben bereits erwähnt, sollte man nur die Quelldateien in der Versionsverwaltung ablegen. Konkret sind dies:

  • *.tex - alle Dateien, die Latex Quellcode enthalten
  • projekt.bib - die Datei mit den genutzten Bibtex Referenzen
  • projekt.bst - die Stildatei zur Formatierung des Literaturverzeichnis
  • projekt.sty - die genutzte Stildatei, falls zum Beispiel eine Vorlage eine spezielle Stildatei mitbringt
  • projekt.tcp - die Projektdatei von TexnicCenter
  • Makefile - die Projektdatei unter Linux
  • svnignore - enthält eine Liste von Dateiendungen, die die Versionsverwaltung ignorieren soll (siehe unten)
  • projekt.cls - manche Vorlagen bringen noch diese Klassendateien mit

Auf der anderen Seite werden von Latex eine Reihe von Dateien automatisch erzeugt. Diese sollte man nicht in der Versionsverwaltung ablegen, da sich die Dateien sehr häufig ändern und jederzeit aus den Quelldateien ohne manuellen Aufwand erzeugt werden können. Typische Dateiendungen sind:

  • dvi, ps, pdf, rtf - das finale Dokument in verschiedenen Formaten
  • bbl und blg - Hilfsdateien für das Literaturverzeichnis
  • aux, idx, ilg, ind, log, toc - temporäre Dateien, z. B. für das Inhaltsverzeichnis oder einen Index
  • tps - Datei von TexnicCenter, speichert z. B. letzte geöffnet Datei

Nutzt man Subversion als Versionsverwaltung, dann würde Subversion immer eine Warnung ausgeben, dass ein Teil der Dateien nicht unter Versionsverwaltung steht. Um diese Warnung zu umgehen, sollte man Subversion mitteilen, dass man ganz sicher die in der 2. Liste aufgezählten Dateien nicht verwalten will. Dazu legt man zunächst im Latexverzeichnis eine Datei svnignore an und listet in dieser alle Dateiendungen, die NICHT verwaltet werden sollen. Die svnignore Datei selbst fügt man der Versionsverwaltung hingegen hinzu (svn add svnignore). Hat man dies getan und befindet sich das Latex Verzeichnis auf dem aktuellen Stand ohne neue Änderungen, dann kann man durch folgende Kommandos die Liste der zu ignorierenden Dateien aktivieren:

svn propset svn:ignore -F svnignore .
svn update
svn commit

Ruft man nun den Befehl svn status auf, listet Subversion die ignorierten Dateien nicht mehr auf und man hat damit einen wesentlich besseren Überblick über den aktuellen Stand seines Latexprojekts.

Neben Subversion gibt es eine Vielzahl weiterer Versionsverwaltungssysteme. Man kann diese Systeme genauso gut einsetzen und sollte sich eine Software wählen, die zu den eigenen Anforderungen passt.