Der erste Schritt zur effizienten Verwaltung eines Git + Latex-Workflows besteht darin, einige Änderungen an Ihren LaTeX-Gewohnheiten vorzunehmen.
Für den Anfang schreibt jeden Satz in einer separaten Zeile . Git wurde in den Versionskontroll-Quellcode geschrieben, wobei jede Zeile unterschiedlich ist und einen bestimmten Zweck hat. Wenn Sie Dokumente in LaTeX schreiben, denken Sie häufig in Absätzen und schreiben es als frei fließendes Dokument. In git werden Änderungen an einem einzelnen Wort in einem Absatz jedoch als Änderung am gesamten Absatz aufgezeichnet.
Eine Lösung ist die Verwendung git diff --color-words
( siehe meine Antwort auf eine ähnliche Frage, in der ich ein Beispiel zeige). Ich muss jedoch betonen, dass das Aufteilen in separate Zeilen eine viel bessere Option ist (ich habe es nur beiläufig in dieser Antwort erwähnt), da ich festgestellt habe, dass es zu sehr minimalen Zusammenführungskonflikten führt.
Wenn Sie sich das Code-Diff ansehen müssen, verwenden Sie das native Diff von git. Um den Unterschied zwischen zwei beliebigen Commits (Versionen) zu erkennen, können Sie dies mit dem sha
s jedes Commits tun . Weitere Details und auch diese Frage finden Sie in der Dokumentation
Wenn Sie sich jedoch den Unterschied Ihrer formatierten Ausgabe ansehen müssen , verwenden Sie latexdiff
ein hervorragendes Dienstprogramm (in Perl geschrieben), das zwei Latexdateien verwendet und eine ordentlich unterschiedliche Ausgabe im PDF-Format wie folgt erzeugt ( Bildquelle ):
Sie können git
und latexdiff
(plus, latexpand
falls erforderlich) in einem einzigen Befehl mit git-latexdiff kombinieren (z. B. git latexdiff HEAD^
um den Unterschied zwischen Ihrem Arbeitsbaum und dem vorletzten Commit anzuzeigen).
Wenn Sie ein langes Dokument in Latex schreiben, würde ich empfehlen , verschiedene Kapitel in ihre eigenen Dateien aufzuteilen und sie mit dem \include{file}
Befehl in der Hauptdatei aufzurufen . Auf diese Weise können Sie einen lokalisierten Teil Ihrer Arbeit leichter bearbeiten und die Versionskontrolle vereinfachen, da Sie wissen, welche Änderungen an den einzelnen Kapiteln vorgenommen wurden, anstatt sie aus den Protokollen eines großen Kapitels herausfinden zu müssen Datei.
Verwenden Sie Zweige! . Es gibt vielleicht keinen besseren Rat, den ich geben kann. Ich habe festgestellt, dass Zweige sehr hilfreich sind, um "verschiedene Ideen" für den Text oder für "verschiedene Zustände" der Arbeit zu verfolgen. Der master
Zweig sollte Ihr Hauptwerk sein, in seinem aktuellsten Zustand "Bereit zur Veröffentlichung", dh wenn es von allen Zweigen einen gibt, auf den Sie Ihren Namen setzen möchten, sollte es der Hauptzweig sein.
Branchen sind auch sehr hilfreich, wenn Sie ein Doktorand sind. Wie jeder Student bestätigen wird, muss der Berater zahlreiche Korrekturen vornehmen, mit denen Sie größtenteils nicht einverstanden sind. Es ist jedoch zu erwarten, dass Sie sie vorerst zumindest ändern, auch wenn sie später nach Diskussionen zurückgesetzt werden. In solchen Fällen können Sie also einen neuen Zweig erstellen advisor
und Änderungen an dessen Geschmack vornehmen, während Sie gleichzeitig Ihren eigenen Entwicklungszweig pflegen. Sie können dann die beiden zusammenführen und auswählen, was Sie benötigen.
Ich würde auch vorschlagen, jeden Abschnitt in einen anderen Zweig aufzuteilen und nur den Abschnitt zu fokussieren, der dem Zweig entspricht, in dem Sie sich befinden. Spawnen Sie einen Zweig, wenn Sie einen neuen Abschnitt erstellen, oder Dummy-Abschnitte, wenn Sie Ihr erstes Commit durchführen (Ihre Wahl, wirklich). Widerstehen Sie dem Drang, einen anderen Abschnitt (z. B. 3) zu bearbeiten, wenn Sie sich nicht in dessen Zweig befinden. Wenn Sie etwas bearbeiten müssen, schreiben Sie dieses fest und checken Sie das andere aus, bevor Sie verzweigen. Ich finde das sehr hilfreich, weil es die Geschichte des Abschnitts in einem eigenen Zweig hält und Ihnen auf einen Blick (vom Baum) sagt, wie alt ein Abschnitt ist. Vielleicht haben Sie Abschnitt 3 um Material erweitert, das an Abschnitt 5 angepasst werden muss ... Natürlich werden diese höchstwahrscheinlich bei einer sorgfältigen Lektüre beobachtet, aber ich finde es hilfreich, dies auf einen Blick zu sehen, damit ich es kann Schalthebel, wenn ich '
Hier ist ein Beispiel für meine Zweige und Zusammenführungen aus einem kürzlich erschienenen Artikel (ich verwende SourceTree unter OS X und Git über die Befehlszeile unter Linux). Sie werden wahrscheinlich feststellen, dass ich nicht der häufigste Committer der Welt bin und auch nicht immer nützliche Kommentare hinterlasse, aber das ist kein Grund für Sie, diesen guten Gewohnheiten nicht zu folgen. Die wichtigste Botschaft zum Mitnehmen ist, dass die Arbeit in Filialen hilfreich ist. Meine Gedanken, Ideen und Entwicklungen verlaufen nicht linear, aber ich kann sie über Zweige verfolgen und zusammenführen, wenn ich zufrieden bin (ich hatte auch andere Zweige, die nirgendwohin führten und später gelöscht wurden). Ich kann Commits auch "markieren", wenn sie etwas bedeuten (z. B. erste Einreichungen in Zeitschriften / überarbeitete Einreichungen / etc.) Hier habe ich es mit "Version 1" markiert, wo sich der Entwurf ab sofort befindet. Der Baum repräsentiert eine Woche '
Eine weitere nützliche Aufgabe wäre es, dokumentenweite Änderungen (z. B. Änderungen \alpha
an \beta
überall) selbst vorzunehmen . Auf diese Weise können Sie Änderungen rückgängig machen, ohne etwas anderes zurücksetzen zu müssen (es gibt Möglichkeiten, dies mit git zu tun, aber hey, wenn Sie dies vermeiden können, warum dann nicht?). Gleiches gilt für Ergänzungen der Präambel.
Verwenden Sie ein Remote-Repo und übertragen Sie Ihre Änderungen regelmäßig nach oben. Bei kostenlosen Dienstanbietern wie github und bitbucket (letzteres ermöglicht es Ihnen sogar, private Repos mit einem kostenlosen Konto zu erstellen) gibt es keinen Grund, diese nicht zu verwenden, wenn Sie mit git / mercurial arbeiten. Betrachten Sie es zumindest als sekundäres Backup (ich hoffe, Sie haben ein primäres!) Für Ihre Latexdateien und als einen Dienst, mit dem Sie die Bearbeitung von der Stelle aus fortsetzen können, an der Sie auf einem anderen Computer abgereist sind.
git [log|show|add] some_file.tex
Alle Arbeiten, hier muss keine konstante Verzweigungsumschaltung hinzugefügt werden. Sie können weiterhin jede Datei einzeln festschreiben, wenn Sie möchten.Ich habe auch einen ähnlichen Workflow. Obwohl jeweils an einem Zweig gearbeitet wird, finde ich es vorteilhaft, separate Zweige für verschiedene Arbeitszustände zu haben. Stellen Sie sich zum Beispiel vor, Sie senden Ihrem Berater einen guten Entwurf Ihres Papiers. Dann bekommst du eine verrückte Idee! Sie möchten anfangen, einige Kernkonzepte zu ändern, einige wichtige Abschnitte zu überarbeiten usw. usw. Sie verzweigen sich also und beginnen zu arbeiten. Ihre Hauptniederlassung befindet sich immer in einem "freisetzbaren" Zustand (oder so nah wie in diesem Moment). Während Ihre andere Niederlassung verrückt ist und einige drastische Änderungen aufweist, ist die Hauptniederlassung immer freigebbar, bereit zu gehen (oder bereit, Ihre zu zeigen, wenn ein anderer Verlag sehen möchte, was Sie haben, oder wenn Sie ein Student sind, der an einer Konferenz teilnimmt Berater). Wenn Ihr Doktorvater den Entwurf als erstes am Morgen sehen möchte,
Nehmen wir an, Ihre Hauptniederlassung hat den "freigebbaren" Status Ihrer Arbeit. Sie möchten es jetzt an mehrere von Experten begutachtete Zeitschriften senden, die jeweils unterschiedliche Formatierungsanforderungen für denselben Inhalt haben, und Sie erwarten, dass sie mit verschiedenen kleinen Kritikpunkten zurückkommen, wie Sie das Papier bearbeiten können, um es ihren Lesern usw. anzupassen. Sie können problemlos einen Zweig für jedes Journal erstellen, journalspezifische Änderungen vornehmen, senden und nach Erhalt des Feedbacks die Änderungen für jeden einzelnen Zweig vornehmen.
Ich habe auch Dropbox und Git verwendet, um das oben beschriebene System zu erstellen. Sie können ein Bare-Bones-Repository in Ihrem Dropbox-Ordner erstellen. Sie können dann von jedem Computer auf Ihre Dropbox drücken / ziehen, um an allen Enden auf dem neuesten Stand zu bleiben. Dieses System funktioniert normalerweise nur, wenn die Anzahl der Mitarbeiter gering ist, da die Möglichkeit einer Beschädigung besteht, wenn gleichzeitig versucht wird, auf das Dropbox-Repo zuzugreifen.
Sie können technisch auch nur EIN Repository im Dropbox-Ordner belassen und Ihre gesamte Arbeit von dort aus erledigen. Ich würde jedoch davon abraten, da die Leute erwähnt haben, dass Dropbox Probleme beim Synchronisieren von Dateien hat, die sich ständig ändern (gits interne Dateien).
quelle
Ich habe versucht, dies als Bash-Funktion zu implementieren. Ich habe es in meine aufgenommen
~/.bashrc
, um es immer verfügbar zu machen.Beachten Sie, dass diese Funktion
latexdiff
installiert sein muss (und sich im Pfad befindet). Es ist auch wichtig, dass es findetpdflatex
undokular
.Die erste ist meine bevorzugte Methode zur Verarbeitung von LaTeX, sodass Sie auch darauf zugreifen können
latex
. Der zweite ist mein PDF-Reader. Ich nehme an, Sie möchten ihnevince
unter gnome oder einer anderen Lösung verwenden.Dies ist eine schnelle Version, die für ein einzelnes Dokument erstellt wurde. Dies liegt daran, dass Sie mit git viel Zeit und Mühe verlieren, ein LaTeX-Dokument mit mehreren Dateien zu verfolgen. Sie können git diese Aufgabe auch ausführen lassen, aber wenn Sie möchten, können Sie sie auch weiterhin verwenden
\include
quelle
latexdiff
mit gitlatexdiff
Befehlszeilentool nur mit verwendengit diff
, wenn Sie es richtig konfigurieren.Eine andere Möglichkeit ist die Verwendung von Authorea , einer Art Github für wissenschaftliche Arbeiten. Jeder Artikel in Authorea ist ein Git-Repo. Und das von Ihnen erstellte LaTeX wird in HTML5 gerendert (sowie in PDF, wenn Sie kompilieren).
quelle
Verwenden Sie dies für Versionsunterschiede, falls Sie unter Windows arbeiten, keine Ratenzahlung, nur ein einfaches
bat
Skript. Es funktioniert perfekt unter Windows 10, Miktex2.9:https://github.com/redreamality/git-latexdiff
quelle