Git und LaTeX

Git fürs Versionieren von LaTeX-Dokumenten

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.

LaTeX-Buch Auflage 6

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:

GitHub Startbildschirm

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.

GitHub Options

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«.

GitHub Name konfigurieren

Ein Repository anlegen

Und genau eine solches Repository erstellen Sie jetzt, dem Sie auf »+ add« klicken.

GitHub Repository erstellen

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.

GitHub Repository erstellen - leerer Dialog

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.

GitHub Repository Masterarbeit

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«.

GitHub Repository Menu

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.

GitHub Repository - Änderungsanzeige

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.

GitHub Commit History

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«.

GitHub Branch Dialog

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«.

Git Merge Branches

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.

Git Merge-Konflikt

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 >>>>>>>>>>>>.

Git manueller Merge

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.

Teilen & Verweilen

Kommentare

38 Antworten zu „Git fürs Versionieren von LaTeX-Dokumenten“

  1. Hallo,
    der Artikel war schon sehr hilfreich. Leider konnte ich den oben erwähnten Artikel für „LaTeX + Git mit mehreren Autoren“ nicht finden. Wo ist er zu finden? Das ist nämlich einer der Gründe für meine Suche nach einer Versionierung.

    Folgende Fragen hätte ich noch:
    1. Wo schreibe ich meine LaTeX-Dokumente? In dem Git-Client oder wie gehabt in meinem Lieblings Editor/Compiler?

    2. Wie genau funktioniert bzgl. 1. das Versionieren? Muss ich diese commits dann in Abständen immer selbst anlegen?

    3. Gibt es auch eine automatisierte Möglichkeit zur Versionierung? Damit meine ich, dass mehrere Autoren gleichzeitig an einem Dokument arbeiten können und die einzelnen Versionen des Dokumentes z.B. alle 5 min automatisch gespeichert werden. Eine Art All-in-One/Eierlegende Wollmichsau-Lösung?

    4. Wie kann ich mehrere Autoren an einem Dokument über Git realisieren? Ist auch gleichzeitiges arbeiten an diesem Dokument möglich von mehreren Autoren? Also Person A und B schreiben gleichzeitig am gleichen Dokument.

    Danke und Grüße
    Mike

    1. Das sollte in der Tat noch ein eigener Artikel werden, der fehlt noch. Hier schonmal die Kurzantwort:

      1. Wie gehabt im Lieblings-Editor.

      2. Ja. Ich empfehle dazu die Lektüre des Git-Book (auf deutsch).

      3. Das habe ich selbst noch nie benötigt. Es gibt wohl Cloud-Lösungen wie etwa ShareLaTeX, die das können.

      4. Ja, das geht problemlos, so lange nicht beide an denselben Absätzen arbeiten. Git kann die Dokumente dann jeweils „mergen“, also zusammenführen. Dazu braucht man dann ein sogenanntes „Remote Repository„.

    2. Danke für die Antwort.

      Zu der Bearbeitung mit mehreren Autoren: Könnte man auch einfach zwei braches „Autor 1“ und „Autor 2“ nutzen und dann am Ende zusammenführen? Das müsste doch auch gehen, oder?

      Danke und Grüße

    3. Avatar von Urs Liska

      Ja, natürlich, man kann einfach separat auf zwei Branches arbeiten. Allerdings wird das Risiko, beim Zusammenführen mit Konflikten zu tun zu bekommen, größer, je weiter die Branches auseinandergehen. Konkret gibt es immer einen „Merge-Konflikt“, wenn auf beiden Seiten die gleichen *Zeilen* des Quelltexts bearbeitet worden sind. Das Schöne daran ist, dass man recht konkrete Angaben bekommt, wie man die Konflikte auflösen kann – besser ist es aber doch, sie gar nicht entstehen zu lassen.

      Daher würde man vermutlich „um einen Hauptbranch“ herum arbeiten (sei das nun `master` oder etwa `inhaltskorrektur`). Von diesem aus sollten beide Autoren ihre Arbeitszweige öffnen, diese aber so schnell wie möglich wieder zusammenführen, beispielsweise immer nach der Korrektur eines Kapitels. Wenn man dann noch die Option wahrnimmt, dass der jeweils Andere für das Zusammenführen verantwortlich ist (was auf Github & co „Pull Request“ genannt wird), hat man einen Workflow von permanentem Peer Review geschaffen, der sehr fruchtbar sein kann, wenn man sich grundsätzlich versteht.

  2. Nach dem Klick auf „Create repository“ werden mir gar keine Dateien sondern lediglich eine leere Liste angezeigt – ist github in einer Weise upgedated worden, dass das angegebene Verfahren nicht mehr funktioniert oder mache ich etwas falsch?

    1. Falls du nun einen Ordner mit demselben Namen innerhalb des Ordners mit den Dateien liege hast: Vermutlich letzteres. Das Projekt muss dann eine Ordner-Ebene höher liegen. Oder du verschiebst die Dateien nun in den neuen Ordner.

    2. Das hats ganz einfach gelöst. Herzlichsten Dank!

  3. Nachtrag!
    Git ersetzt kein Backup! Ich erstelle bei wichtigen Arbeiten meine git repository im Cloudspeicher (z.B. Dropbox, Owncloud oder andere) und zusätzliche per automatisierten Skript auf einen weiteren Webspace..wahlweise kann dafür auch ein USB Stick verwendet werden.

    1. Danke für die interessanten Artikel! So langsam schwindet die Skepsis gegenüber GitHub :-).
      Sicherheitskopien auf einer Cloud oder sonstiges sind natürlich pflicht. Bis dahin wünsche ich allen froh besinnliche Festtage!

  4. Hallo zusammen,
    erstmal ein Dankeschön an den Autor und Betreiber der Page! Sehr gelungene Sache, freue mich schon darauf meine Bachelorthesis mit Latex zu schreiben und somit dem Formatierungschaos zu entgehen. Ich habe mich soweit einarbeiten können allerdings hängt es bei mir nur noch an der Versionierung meiner Dokumente mit GitHub. Nun treten bei mir 2 Fehler bzw. Bedienungsmängel auf:

    Nr. 1:
    Und zwar wenn ich eine globale ignore Datei (.gitignore_global) erstellen will in meinem Benutzerverzeichnis (wie oben beschrieben) mekert Windows rum dass ich der Datei doch bitte einen Namen geben möchte. Wie kann ich das umgehen?

    Nr. 2:
    Beim Anwenden von GitHub treten Probleme auf wenn ich eine ältere Version „reverten“ möchte. Ich habe mir ein Testverzeichnis erstellt wo ich ein Latex Dokument versionieren möchte. Nun ich ändere den Text lasse es mit meinem Editor kompilieren und versioniere die .tex Datei mit GitHub. Nachdem ich das mehrere Male getan habe versuche ich wieder eine ältere Version zu „reverten“. Dabei tritt dann folgende Fehlermeldung zunächst auf:
    „Resolve the conflicts in your working directory and commit them before trying the revert again.“

    Bei einem weiteren Versuch kommt diese Fehlermeldung:
    „You have unmerged files in your working directory. Resolve them and commit them befor trying the revert again.“

    Ich weiß nicht so recht was ich falsch mache. Hat jmd ähnliches Problem gehabt und kann mir weiterhelfen?

    Ich danke euch, gruß Günter!

    1. Zur ersten Frage kann ich nichts sagen, da ich nicht mit Windows arbeite.

      Zur zweiten auch nur bedingt, da die Informationen nicht so recht vollständig sind. Es sieht für mich so aus, als ob Sie „git revert“ versuchen, während noch ungespeicherte (uncommited) Änderungen im Projektverzeichnis stehen.
      Falls das nicht der Fall sein sollte, denke ich, das Sie versuchen, einen älteren Commit rückgängig zu machen, nicht den letzten. In diesem Fall kann es natürlich möglich sein, dass Konflikte auftauchen, das ist eigentlich ähnlich wie das Mergen eines anderen Branches. In diesem Fall wäre das Vorgehen genauso wie beim Auftreten eines Merge-Konflikts: Identifizieren der Konflikte (an Hand der <<>> marker in der Datei), Auflösen der Konflikte, und dann hinzufügen/committen.

      Aus Ihrem Text geht es nicht ganz klar hervor, aber der Vollständigkeit halber möchte ich auch folgende Möglichkeit ansprechen: Könnte es sein, dass Sie nicht einen bestimmten Commit *rückgängig machen*, sondern das Projekt auf diesen Stand zurücksetzen wollen? „git revert“ macht den entsprechenden Commit rückgängig, indem es genau die umgekehrten Operationen anwendet und committet (und genau dabei können dann ja auch Konflikte auftreten). Das Projekt auf diesen Stand *zurücksetzen* kann man mit anderen Befehlen (die ich aber nicht so ins Blaue hinein hier reintippen möchte, da sie potenziell gefährlich sind).

      HTH

    2. So ist es. Bei manchen Gegebenheiten stößt die Github-Oberfläche an ihre Grenzen, dann braucht’s die Kommandozeile.

    3. Hallo!

      Zu 1.: Das ist ein bekanntes Problem unter Windows. Der Trick ist, dass du die Datei mit einem Editor erstellst. Siehe hier als Beispiel: https://www.zdv.uni-mainz.de/3571.php

      Zu 2.: Ich verstehe dich so, dass du deine Repo auf einen alten Commit zurückführen willst ohne dabei die neueren Änderungen zu verlieren? Wenn ja, dann wären die Zweige – Branch – besser geeignet.

    4. Zu Frage 1: Bitte mal unter http://islegend.com/development/setting-global-gitignore-mac-windows/ nachsehen.
      Zu Frage 2: Siehe Antwort von Urs Lika.

    5. Danke für die schnelle Antworten!

      Nummer 1 ist gelöst, danke!

      Zu Nr. 2:
      Ich denke mir ist die Funktion von GitHub noch nicht so ganz klar, bzw. habe mir was anderes drunter vorgestellt. Naja ich habe gedacht, dass wenn ich ein commit mache, dass ich eine Version meines Dokumentes erstelle. Nun schreibe ich weiter und habe in zwischen 3 weitere Versionen, 2,3 und 4, „comittet“ bzw. erstellt. Nun stelle ich fest, dass mir der Text aus Version 2 besser gefällt als der aus der 4ten Version und möchte diesen wieder haben. Nun dachte ich dass ich diese 2te Version nun durch die „revert“ Funktion einfach laden kann. Also wie Urs Liska sagte, nicht nur einen Commit rückgängig machen, sondern das Projekt auf einen ursprünglichen Zustand zurücksetzen möchte. Was wohl mit einem größeren Aufwand verbunden ist.

      Ob das bei meiner Anwendung (Soloschreiben meiner Bachelorarbeit) Sinn macht kann ich noch nicht sagen, das wird sich beim Schreiben und Anwenden herausstellen. Ich meinem Fall sehe ich zunächst Anwendung darin dass ich einen Überblick über meinen Arbeitsfortschritt erhalte, diesen auch wieder rückgängig machen könnte mit etwas mehr Aufwand als gedacht, und dass ich besser vor versehentliches Löschen einer Datei geschützt bin.

      Ich danke Gruß Günter

    6. Vorab zum Thema GitHub: Ich empfehle immer, Versionskontrolle zunächst mit Hilfe der Kommandozeile zu erlernen, da GUIs wie GitHub die doch sehr mächtige Funktionaliät in einer Weise verschleiern, die für den Einsteiger oftmals mehr verwirrend als hilfreich ist.

      Um zu einem früheren Stand zurückzukehren, gibt es zwei Möglichkeiten: temporär oder endgültig. Um temporär einen früheren Stand zu erreichen (etwa um ihn zu inspizieren) bietet es sich an, am entsprechenden Commit einen Branch zu erzeugen und auf diesen zu wechseln (man kann einen Commit auch direkt auschecken („git checkout „), aber mit explizitem Branch ist es etwas übersichtlicher. Um das Projekt komplett auf einen früheren Stand zurückzusetzen gibt es den Befehl „git reset [Option] „. Wenn man ihn ohne Option (oder mit dem Defaultwert „–mixed“) anwendet, werden die Unterschiede im Projektverzeichnis beibehalten. Das heißt konkret: der letzte Commit ist derjenige, auf den Sie zurückgesetzt haben, und alle weiteren Änderungen sind als „uncommitted“e Änderungen vorhanden. Das ist dann sinnvoll, wenn Sie einzelne Änderungen nachträglich wieder hinzufügen wollen. Mit der Option „–hard“ werden alle versionierten Dateien zurückgesetzt, und das ist (praktisch) nicht rückgängig zu machen. (Achtung: nicht versionierte Dateien wie z.B PDFs werden nicht verändert, die müssen neu kompiliert werden).

      Schließlich: Bleiben Sie unbedingt beim Versionieren, auch wenn es am Anfang etwas verwirrend ist. Ich hatte vor etwa zwei Jahren auch so meine Zweifel, ob sich der Aufwand lohnt – aber ich bin der festen Überzeugung, das Verhältnis von Aufwand und Nutzen ist vergleichbar mit dem Laufen- und Lesenlernen. Schauen Sie mal auf http://lilypondblog.org/tag/version-control/. Den Post http://lilypondblog.org/2014/01/why-use-version-control-for-engraving-scores/ habe ich ausdrücklich auf die Frage hin geschrieben, was Versionierung für allein Arbeitende bringt. Es geht dabei zwar in den meisten Fällen um Notensatz, aber die Arbeit mit LilyPond und LaTeX ist in dieser Hinsicht absolut vergleichbar.

    7. Dafür bieten sich die Branches an. Hier ein englischer Post dazu
      http://stackoverflow.com/a/6190412/4284547

      Auf dem master Zweig ist deine endgültige Fassung und für jede Idee beim Schreiben nutzt du ein neuen Zweig.

  5. Hallo,

    erst einmal danke für die tolle Homepage und das grandiose Buch.
    Mit ihrer Hilfe habe ich es geschafft, meine Dissertation in LaTeX zu beginnen.

    Nun habe ich auch ein Versionsmanagement mit GitHub aufgesetzt und nach viel Bastelei (musste erst einmal herausfinden, dass ich GitHub über Konsole erklären muss, sich mit anderen SSH-Keys an meinem Server anzumelden) funktioniert jetzt das grundsätzliche Commiten und Synchronisieren.

    Nur ein Problem bleibt, GitHub will nach wie vor immer wieder auch die Hilfsdateien des LaTeX-Laufs synchronisieren. Ich habe bei ignored files in GitHub die Liste von dieser Seite eingetragen, der Befehl für die .gitignore_global wirft bei mir allerdings folgenden Fehler aus: error: key does not contain a section -global

    Wäre für Tipps sehr dankbar, es nervt doch auf Dauer ziemlich, die Dateien immer zu exkludieren.

    1. Hallo Marvin,

      bist du nach https://help.github.com/articles/ignoring-files#create-a-global-gitignore vorgegangen?
      Welchen Befehl hast du ausgeführt, der in dem Fehler resultierte?

    2. Hallo,

      die genannte Seite kannte ich bis dato noch nicht, ich bin rein nach der Anleitung hier vorgegangen, aber der Link hat schon einmal ein Problem gelöst. Hier auf der Seite steht folgender Befehl:
      git config –global core.excludesfile ~/.gitignore_global
      Dieser hat bei mir den genannten Fehler geworfen. Auf der verlinkten Seite steht folgendes:
      git config –global core.excludesfile ~/.gitignore_global
      Also mit doppeltem Minus. In dieser Version konnte ich den Befehl ohne Fehlermeldung ausführen.

      Es bleibt jedoch leider dabei, dass Github for Windows jedes Mal auch die ganzen .aux, .bbl, etc. pp. Dateien anzeigt und committen will, ich muss also weiter jedes Mal die Häkchen von Hand entfernen…

    3. Und danke natürlich auch für die Lorbeeren!

    4. Kleiner Nachtrag,
      hier wird das doppelte Minus scheinbar automatisch zu einem zusammengeführt, weswegen in meiner Antwort beide Befehle identisch aussehen.
      Auf der verlinkten Seite lautet der Befehl:
      git config global core.excludesfile ~/.gitignore_global
      Hier in der Anleitung ist jedoch nur ein Zeichen…

    5. Also als Workaround könntest du auch eine Datei .gitignore im Repository Ordner (also nicht im .git Ordner, sondern im Ordner, der .git enthält) erstellen und dort alle Dateiendungen einfügen, die ignoriert werden sollen. Dabei kannst du auch ganze Ordner exkludieren. Die Datei wird automatisch erkannt.

    6. Hallo,

      genau so eine Datei habe ich ja. Wie gesagt, bin genau der Anleitung hier gefolgt.
      Wenn ich in github unter .gitignore gucke sind auch alle nötigen Endungen eingetragen.
      Habe die Datei auch schon manuell mit dem Editor geöffnet, die Einträge sind definitiv vorhanden.

      Nur scheint Github das irgendwie nicht zu interessieren.

    7. In der Tat seltsam, vor allem weil die Github-Hilfe dasselbe sagt: https://help.github.com/articles/ignoring-files

      Bist du sicher, dass die Dateien nicht aus Versehen schon eingecheckt sind? Wenn dem so wäre, müsstest du die zunächst löschen.

    8. Also ich sämtliche Hilfsdateien aus dem Projektordner gelöscht.
      GitHub synchronisieren lassen -> Die Dateien sind weg (logisch)
      Neuen Latexlauf gestartet -> Die Hilfsdateien tauchen mit „NEW“ Tag wieder in GitHub auf…

      Habe auch den Teil von der GitHub Hilfe mit „git rm –cached“ ausprobiert, aber da kommt dann „DATEINAME did not match any files“, also sollten die Hilfsdateien ja noch nicht im cache sein.

    9. ICH HAB ENDLICH DEN FEHLER GEFUNDEN! :)

      Beim kopieren der Liste aus dem Blogeintrag in die .gitignore wurde hinter jede Dateiendung ein Leerzeichen gesetzt! Das hat dazu geführt, dass die entsprechenden Dateitypen eben nicht ignoriert wurden.

      Habe jetzt hinter jedem Dateityp das Leerzeichen entfernt und alles funktioniert wie es soll.

      Vielen Dank für die reichlichen Antworten.

  6. Erstmal danke für den Beitrag. Wollte schon svn ausprobieren, hab mich dann aber für git entschieden.

    Ich wollte ebenfalls gitinfo benutzen und hatte das Problem, dass er keine “gitHeadInfo.gin” erstellen wollte. Die Lösung ist (zu mindestens bei mir) sehr einfach.

    Es liegt an der Angabe eines Pfades. Laut der Paketbeschreibung geht das Skript vom git-Repository-Arbeitsverzeichnis aus, wenn man Pfade angeben will, wo die tex-Dateien liegen. Dabei muss man laut Manual kein Punkt am Anfang setzen. Dies ist unter Windows nicht ganz korrekt. Mit einem vorangestellten Punkt klappt die Erstellung. Der Punkt bezeichnet dabei das Arbeitsverzeichnis von der git-Repository.
    Mein Code:

    prefixes="./latex ./latex/parts" # Example for multiple gitHeadInfo.tex files

    Es macht übrigens bei mir kein Unterschied, ob Git Bash oder Powershell.

    Ich hoffe, dass ist die Lösung, die ihr braucht.

  7. Avatar von ctpfaff

    Hallo

    Danke zuerst einmal für diesen tollen Artikel. Ich arbeite gerade an einer LaTeX-Klasse (Open-Science-Paper), die eventuell für den ein oder anderen Leser interessant sein könnte ( https://github.com/cpfaff/Open-Science-Paper ).

    Sie bietet ein schön formatierten output im stile typischer wissenschaftlicher Artikel und lässt sich durch viele optionen leicht anpassen. Sie lässt sich wunderbar zum gemeinsamen schreiben wissenschaftlicher Artikel verwenden.

  8. Ich habe github mit gitinfo ausprobiert, und bei mir klappt es, wenn ich in der Git-Konsole manuell „git checkout“ eintippe. Wenn ich das nur über die Oberfläche mache, scheint er das post-checkout-Skript nicht auszuführen. Gibt es da eine Möglichkeit, das über die Oberfläche zu machen?

    1. Das sollte ja eigentlich dasselbe Kommando aufrufen. Klingt mir nach einem nicht beabsichtigten Verhalten. Am besten kippst du das als Bug bei den Leuten von Github ein.

  9. Avatar von Marcus Bednar
    Marcus Bednar

    Bin über diese Beschreibung auf „github“ gekommen und nutze es bereits in der „offline-Variante“ mit meinen LaTeX-Dokumenten. Funktioniert einwandfrei und ist sehr einfach zu bedienen. Danke für die o.a. Anleitung an den Autor!
    Allerdings würde ich jetzt gerne das Paket „gitinfo“ verwenden um die Metadaten des Repository in meine LaTeX-Dokumente zu übernehmen.
    Gemäß Beschreibung des Paketes „gitinfo“ müssen im „hook-Verzeichnis“ des Repository die Dateien: „post-checkout“, „post-commit“ und „post-merge“ erstellt werden.
    Nach einem „commit“ sollte dann im Projektverzeichnis automatisch eine „gitHeadInfo.gin“ generiert werden, welche die aktuellen Versionsdaten zur Übernahme in LaTeX mit dem Paket „gitinfo“ enthält.
    –> Genau das funktioniert bei mir aber leider nicht.

    Kann mir in dieser Frage jemand behilflich sein?

    Vielen Danke im Voraus!

    P.S. Ich nutze die Windows-Version von github

    1. Das Problem kann verschiedene Lösungen haben, je nach Ursache.
      a) Bitte stelle in GitHub->tools->options die „default shell“ auf „Git Bash“, denn das Skript, das als Beispiel mit dem Paket gitinfo mitgeliefert wird, ist ein Bash-Shellskript.
      b) Prüfe, ob da Beispielskript mit den richtigen Namen ins korrekte Verzeichnis kopiert ist.
      Hilft das weiter?

    2. Avatar von Marcus Bednar
      Marcus Bednar

      Alles kontrolliert – leider funktioniert es trotzdem nicht.
      Solange ich ein „commit“ mit dem „git GUI“ durchführe, bekomme ich sofort eine “gitHeadInfo.gin” im richtigen Verzeichnis generiert. Damit schließe ich aus, daß ich das Script falsch benannt habe und/oder es im falschen Verzeichnis liegt.
      Bash-Shellscript ist auch als default eingestellt.

      Gibt es sonst eventuell noch weitere Lösungsvorschläge – bei wem funktioniert „gitHUB“ in Verbindung mit „gitInfo“?

      Vielen Dank für eure Hilfe.

    3. Frag mal drüben auf http://www.golatex.de nach, wer Erfahrung damit hat. Vielleicht hatte das Problem ja schonmal jemand. Ansonsten sieh dir mal das Paket vc (http://www.ctan.org/tex-archive/support/vc/) an. Kenne ich selbst nicht, doch enthält es ein Skript für Git unter Windows.

  10. Avatar von Urs Liska

    Danke für diesen Beitrag, den ich mir für gelegentliche Verlinkung an Interessenten vorbehalten möchte. Bei der Durchsicht Ihres Artikels über Subversion wollte ich genau diesen Hinweis hinterlassen, was sich aber erübrigt hat ;-)

    Ihr Buch hat mir übrigens sehr gut den Weg zu LaTeX gewiesen, da esdie Sachverhalte zwar kurz aber doch grundsätzlich erklärt und nicht (im Gegensatz zu vielen anderne „Einsteiger-Leitfäden“) letztlich nur Beispiele zum Abtippen bietet.

    1. Danke sehr! Es freut mich, wenn Buch und Artikel weiterhelfen. Bei meinem Buch müssen Sie ja noch nichtmal Beispiele abtippen, die gibt es ja alle auf der LaTeX-Buch-Seite.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Kostenloses eBook

Das eBook »E-Mail effizient einsetzen« zeigt Ihnen, wie Sie E-Mail besser nutzen. Mehr Info…

Über 1900 E-Mail-Abonnenten!


Beliebteste Beiträge