Da geht man mal kurz raus und schon gibt’s seit mehreren Jahren ein hervorragendes freies Versionsverwaltungssystem neben Subversion, das sich Git nennt. Für den Hinweis danke ich herzlich Gerrit, einem Leser meines LaTeX-Buches, und bin nun von Subversion nach Git gewechselt. Nachdem ich Versionierung hauptsächlich für Dokumente in LaTeX einsetze, möchte ich hier aus Sicht der schreibenden Zunft vorstellen, wie Sie als Nicht-Programmierer für sich Git nutzbringend einsetzen, wenn Sie einfach nur für sich sicherstellen möchten, dass Sie auf alte Fassungen Ihres LaTeX-Dokuments einfach wieder zugreifen können.
Wer, was, warum?
Was ist Versionierung?
Darauf bin ich in einem früheren Artikel eingegangen, so dass hier die Kurzfassung reichen sollte:
Stellen Sie sich vor, löschen aus Versehen einige Absätze aus Ihrer Masterarbeit und speichern dann, nur um sofort danach zu erkennen, dass das eine blöde Idee war. Was nun?
Ohne Versionierung müssen Sie Ihr Backup herauskramen (das Sie hoffentlich haben!) und darauf bauen, dass es noch nicht zu alt ist. Mit Versionierung holen Sie sich die fraglichen Absätze aus der Historie des Dokuments zurück.
Das einzige, an das Sie denken müssen, ist, des öfteren Ihre Änderungen in das Versionierungs-System zu übermitteln, am besten mehrmals täglich. Das geht schnell und einfach und ist Ihre beste Versicherung.
Was ist Git?
Git ist ein solches Versionierungsprogramm. Es hilft ganz ausgezeichnet dabei, Dateien, also Dokumente, Skripte, Grafiken und was Sie sonst noch für Ihre Arbeit brauchen, in dem Verzeichnis zu versionieren, in dem Sie ohnehin arbeiten. Die Ablage (=Repository) liegt also nicht irgendwo anders, sondern genau hier.
Wenn Sie wollen oder müssen, können Sie diese Ablage replizieren, weitergeben, und auf diese Weise mit anderen am selben Projekt arbeiten, ohne dass Sie immer alle Zugriff auf dieselbe Ablage haben. Mehrere Kopien der Ablage lassen sich synchronisieren.
Ich habe noch nie mit LaTeX gearbeitet. Ist dieser Artikel für mich?
Ja, aber nur die ersten Abschnitte. Lernen Sie zunächst LaTeX. Es lohnt sich.
Ich habe noch nie mit Versionierung gearbeitet. Nehme ich Git oder Subversion?
Nehmen Sie Git. Warum? Weil der simpelste Anwendungsfall rascher einzurichten ist als bei Subversion. Subversion verlangt, dass Sie explizit ein Verzeichnis als Repository anlegen und dann mittels einer URL-Syntax von Ihrem eigentlichen Arbeitsverzeichnis darauf verweisen. Das dürfte für den einen oder anderen frischen LaTeX-Anwender schon ziemlich kompliziert sein. Mit Git brauchen Sie das alles nicht. Sie sagen quasi einfach »hier möchte ich mit Git arbeiten« und das war’s.
Erspart mir Git das Anlegen einer Sicherungskopie, das Backup?
Nein. Das eine hat mit dem anderen nur bedingt etwas zu tun. Eine Versionierung schützt Sie vor eigenen Untaten und erlaubt Ihnen, auf frühere Versionen zurückzugreifen. Ein Backup schützt Sie vor Datenverlust.
Ich verwende Mac OS X und die Time Machine. Brauche ich trotzdem Git?
Ja. Wenn Sie Apple Time Machine ständig am laufen haben, also Ihre Backup-Festplatte ständig am PC hängt, dann haben Sie tatsächlich jede Stunde einen Schnappschuss und damit eine Art Versionierung. Leider sind Sie dann nicht gegen Datenverlust geschützt, weil die Festplatte am selben Stromkreis hängt und im selben Moment stürbe wie der Computer, wenn ein Stromnetz-Fehler auftritt. Wenn Sie nun schlau sind und mit zwei externen Festplatten im wöchentlichen Wechsel arbeiten, dann können Sie immer nur auf die Versionen der aktuellen Woche zurückgreifen. Da müssten Sie schon Time Capsule verwenden und diese in einem anderen Stromnetz, am besten in einem anderen Haus stehen haben.
Einrichten
Herunterladen und Installieren
Am einfachsten laden Sie GitHub herunter, dann haben Sie auch gleich eine grafische Bedienoberfläche. GitHub gibt es für Windows, für Mac OS X und für Linux.
Installieren Sie das Programm. Beim ersten Aufruf werden Sie folgenden Bildschirm sehen:
Klicken Sie »cancel« oder drücken Sie die Escape-Taste, wie in Zukunft jedes Mal, wenn Sie GitHub starten. Sie brauchen keinen Login, und Sie brauchen sich auch nirgendwo zu registrieren (»sign up«). GitHub ist der Name eines Online-Dienstes, der es erlaubt, öffentliche Git-Ablagen zu erstellen und im Internet zu speichern, und dafür benötigt man eine Anmeldung. GitHub stellt dieses grafische Programm zur Verfügung, das auch hervorragend auf rein lokalen Ablagen (»Repositories«) funktioniert.
Auch wenn Sie kein GitHub-Konto möchten, so sollten Sie doch einen Namen konfigurieren, damit bei der Versionierung auch mit abgespeichert werden kann, dass Sie das getan haben. Irgendwann werden Sie es mal brauchen, wenn Sie nämlich dann doch mal zu mehreren Personen an einem Projekt arbeiten. Wählen Sie dazu »tools → options«.
Im folgenden Dialog geben Sie unten Ihren gewünschten Namen und eine E-Mail-Adresse an, die Sie für die Versionierung verwenden möchten. Diese Informationen werden nur lokal gespeichert und nirgendwo online verwendet. Bestätigen Sie mit »update«.
Ein Repository anlegen
Und genau eine solches Repository erstellen Sie jetzt, dem Sie auf »+ add« klicken.
Nun gehen wir davon aus, Sie hätten Ihre Masterarbeit schon begonnen und in einem Verzeichnis mit dem Namen »Masterarbeit« abgelegt. Als Beispieldateien nehme ich die LaTeX-Vorlagen aus meinem LaTeX-Buch.
Geben Sie Namen des Repositories an, der dem Namen des bereits existierenden Verzeichnisses entsprechen sollte, und eine Beschreibung, dazu wo das Verzeichnis liegt.
Ein Klick auf »create« setzt den Wunsch in die Tat um, und Sie können in der Übersicht Ihr neu erzeugtes Repository auswählen durch Doppelklick oder Klick auf den blauen Pfeil.
Sie sehen nun alle Dateien Ihres Verzeichnisses in der Ansicht, die Ihnen alle noch nicht synchronisierten Änderungen zeigt.
Konkret: Sie suchen jetzt aus, welche Dateien Sie der Versionierung unterwerfen wollen. Arbeiten Sie mit LaTeX, brauchen Sie nur die eigentlichen Dokument-Dateien ins die Ablage übertragen, alle Zwischendateien (*.aux *.log *.bbl *.blg *.idx
und so weiter) werden ja von LaTeX, BibTeX, biber und ähnlichen Programmen, ohnehin jedes Mal beim Kompilieren neu erzeugt.
Zwischendateien ignorieren
Damit Sie nicht jedes Mal neu die Häkchen vor den unnötigen Dateien, die Sie nicht im Repository haben wollen, entfernen müssen, können Sie Dateitypen ausschließen. Wählen sie dazu »tools → settings«.
Sie sehen im Feld »ignored files« einige, die GitHub von vornherein ausschließt. Für LaTeX, BibTeX und Konsorten füge ich folgende weitere Dateitypen am Ende hinzu:
# TeX/LaTeX intermediates # ########################### *.*~ *.aux *.log *.tmp *.xref *.pdx *.pnd *.bbl *.bcf *.auto *.blg *.dvi *.glo *.out *.idx *.ilg *.ind *.idv *.4ct *.4tc *.lg *.xmpi *.tcp *.toc *.tps *blx.bib *.run.xml
Diese Liste wird in Ihrem Verzeichnis in der Datei .gitignore gespeichert. Sie sollten diese zu Ihrem Repository hinzufügen.
Damit Sie dies nicht jedes Mal aufs Neue konfigurieren müssen, machen Sie die Liste global bekannt. Kopieren Sie dazu die Datei .gitignore
in Ihr Benutzerverzeichnis (bei mir c:\Users\jschloss) und benennen sie um in .gitignore_global
. Nun wählen Sie »tools → open a shell here«. Im Kommandozeilenfenster, das sich nun öffnet, geben Sie folgenden Befehl ein:
git config –global core.excludesfile ~/.gitignore_global
Wenn alles klappt, kommt keine Meldung und Sie brauchen sich in GitHub um viele Zwischendateien zukünftig nicht mehr zu kümmern.
Der erste Commit
Nun ist es soweit: Sie prüfen nochmal die Liste der Dateien, die Sie der Versionierung unterwerfen wollen, geben ins Feld »Commit Message« eine knappe Beschreibung dessen ein, was Sie gerade tun, nämlich »Erster Commit«. Ein »Commit« ist die Aktion, Änderungen an Ihren Dateien in das Repository zu übernehmen. Wenn Sie möchten, können Sie auch eine ausführlichere Beschreibung ins Feld »Extended Description« aufnehmen. Dies empfiehlt sich bei den meisten späteren Commits in Git.
Weiterarbeiten und Änderungen vornehmen
Jetzt schreiben Sie Ihr LaTeX-Dokument bzw. schreiben daran weiter. Sie fügen weitere Teile hinzu, es kommt die eine oder andere Grafikdatei dazu oder auch Rohdaten und Notizen, die Sie gerne versioniert haben wollen.
GitHub zeigt, wenn Sie »uncommitted changes« wählen, alle geänderten und alle noch nicht versionierten Dateien an.
Ein Klick auf die kleinen vertikalen Pfeile rechts neben dem Dateinamen erlaubt Ihnen, die Änderungen zu sehen, soweit GitHub die Dateien als Text erkennt.
Mit einem Klick auf den Dateinamen oder das Häkchen links daneben wählen Sie Dateien für diesen Commit an oder ab. Warum das? Entweder Sie wollen in einem Commit nur bestimmte Änderungen übertragen, oder Sie wollen bestimmte Dateien eben (noch) nicht versionieren. Wenn Sie die Auswahl getroffen haben, geben Sie wieder eine »Commit Message« an und klicken »commit«.
Jetzt sehen Sie rechts alle bisherigen Commits, zusammen mit ihren jeweiligen Kurzbeschreibungen – und deswegen sind diese auch so wichtig.
Mit einer Auswahl in dieser Liste können Sie ganz genau sehen, was sich jeweils geändert hat. Möchten Sie Ihren letzten Commit rückgängig machen, wählen Sie »revert commit«. Dies erzeugt einen neuen Commit, der Ihre letzten Aktionen rückgängig macht.
Wollen Sie zum Zustand eines weiter zurückreichenden Commit gehen, wählen Sie beim jeweiligen Commit »roll back to this commit«. Dieses ändert Ihre Dateien im Verzeichnis, also stellen Sie sicher, dass Sie vorher alles ins Repository übertragen haben, was Sie vielleicht noch brauchen!
Branch – Verzweigen zum Ausprobieren
Nehmen wir an Sie wollen eine andere Art der Formulierung im bestehenden Text ausprobieren und dieses Projekt mal einige Zeit nachverfolgen, ohne dass der Rest Ihres LaTeX-Dokuments leidet, an dem Sie ja normal weiterschreiben. Dann brauchen Sie das, was im Versionierungs-Jargon »Branch« heisst, zu deutsch »verzweigen«. Sie verzweigen also den Fortschritt Ihres LaTeX-Dokuments. Das ist okay, denn später hilft Ihnen Git, die Zweige wieder zusammenzuführen.
Einen Branch erzeugen
In GitHub bewerkstelligen Sie das, in dem Sie auf »Branches« klicken und dann einen Namen für den neuen Zweig angeben, beispielsweise »Ausprobieren«.
Sie sehen nun hinter dem Gabelsymbol nicht mehr »master« stehen, sondern »Ausprobieren«, und sehen damit, dass sich gleichzeitig der aktuelle Zweig geändert hat.
Jetzt heißt es ein wenig Disziplin an den Tag legen: Alles, was Sie jetzt an Ihrem Dokument und den damit verbundenen Dateien ändern, sollte tatsächlich nur das Ausprobieren sein. Führen Sie regelmäßig einen Commit durch.
Den Branch wechseln
Wollen Sie einfach ganz normal Ihr LaTeX-Dokument weiterschreiben, so sollten Sie das im »master«-Branch tun. Schließen Sie die Dokumente im Editor, führen nochmal einen Commit auf dem »Ausprobieren«-Branch durch und klicken dann auf das Verzweigungssysmbol wie vorher zum Anlegen, wählen dann »master« aus. Nun werden alle Dateien in Ihrem Arbeitsverzeichnis auf den Stand gesetzt, den sie hatten, als Sie das letzte Mal mit dem Hauptzweig gearbeitet haben.
Schreiben Sie nun unbekümmert weiter und führen auch hier wieder regelmäßig einen Commit durch, um die Fortschritte Ihrer Arbeit zu sichern.
Zusammenführen – Merge
Irgendwann kommt nun der Punkt, an dem Sie das, was Sie nur ausprobiert haben, tatsächlich in Ihr Dokument übernehmen wollen. Versionierungssysteme unterstützen dies mit einer Technik, die »merge« heisst, »zusammenführen«.
Klicken Sie wieder auf das Verzweigungssymbol und wählen dann »manage«.
In diesem Dialog steuern Sie die Zusammenführung der Zweige. Ziehen Sie den »Ausprobieren«-Zweig an die erste freie Stelle und den »master«-Zweig an die zweite. Mit einem Klick auf »merge« führt Git die beiden Zweige zusammen.
In der Historie der »unsynched commits« können Sie nun genau ersehen, was sich geändert hat.
Zusammenführen bei Konflikten
Falls Sie in den verschiedenen Zweigen an denselben Stellen, in denselben Zeilen etwas geändert haben, kommt es beim Zusammenführen natürlich zum Konflikt. Diesen müssen Sie dann selbst beheben. Klicken Sie dazu auf »cancel«, um dann im Hauptfenster von GitHub zu sehen, welche LaTeX-Dateien den Merge verhindern.
Sie sehen eine Zeile Kleiner-Zeichen <<<<<<<<<<<<
, gefolgt von der Fassung der betreffenden Zeile im Hauptzweig, gefolgt von einer Zeile Gleichzeichen ===============
, der Version aus dem anderen Zweig, das ganze abgeschlossen von einer Zeile Größer-Zeichen >>>>>>>>>>>>
.
In dieser Ansicht können Sie jedoch das Schlamassel nur sehen, nicht jedoch beheben. Dazu laden Sie die Datei in Ihren normalen LaTeX-Editor. Modifizieren Sie die fraglichen Abschnitte so, dass es für Sie passt. Löschen Sie die Markierungszeilen.
Dann können Sie wieder einen Commit durchführen, und als passenden Kommentar beispielsweise »Manuellen Merge« angeben.
Bei komplizierteren Merges ist es möglich, dass GitHub Sie auffordert, den Konflikt in der Shell zu beheben, also auf der Kommandozeile. Für das genaue Vorgehen empfehle ich Ihnen den entsprechenden Abschnitt zum Thema Merges in der hervorragenden Dokumentation von Git.
Zusammenfassung
Git und die grafische Oberfläche GitHub sind eine ideale Ergänzung für Ihre Schreibarbeit mit LaTeX. Die Versionierung geschieht dort, wo Sie sowieso Ihr LaTeX-Dokument liegen haben, Sie brauchen sich nicht wie bei anderen Versionierungssystemen mit dem Anlegen eines speziellen Repositories zu beschäftigen.
Git ist ebenso leichtgewichtig wie mächtig. Fangen Sie jetzt damit an und ersparen Sie sich zukünftig die Frage »wie hatte ich das denn vorgestern formuliert?«
Und wie versionieren Sie?
Git Logo by Jason Long is licensed under the Creative Commons Attribution 3.0 Unported License.
Schreiben Sie einen Kommentar