Ich habe recht häufig mit Word-Dokumenten zu tun, die ich gerne in Git-Repositories einchecke. Ob das gut oder schlecht ist, sowohl mein häufiger Kontakt mit Word, als auch die Organisation mittels Git, möchte ich hier gar nicht thematisieren :). Im Moment passt es so, auch wenn ich gerne mehr mit LaTeX & Co. arbeiten würde, anstatt mit Word & Co. Aber das ist selten meine Entscheidung und daher nicht zu ändern.
Mir geht es in diesem Blogpost eher um ein paar Tipps und Tricks beim Vergleich von Änderungen zwischen Word-Dokumenten. Das kann schnell sehr nervig sein, insbesondere bei längeren Dokumenten.
Der übliche Weg
In der Regel können zwei Dokumente mit git diff
verglichen werden. Ich habe mir zu Testzwecken ein neues Git-Repository angelegt und ein Word-Dokument erstellt. Der Inhalt hält sich stark in Grenzen. Es sind nur die folgenden Zeilen enthalten.
Etwas Text in der ersten Zeile.
Etwas Text in der zweiten Zeile.
Etwas Text in der dritten Zeile.
Etwas Text in der vierten Zeile.
Etwas Text in der fünften Zeile.
Soll ja auch nur ein Test sein. Nach einem ersten Commit habe ich Änderungen an der zweiten und vierten Zeile vorgenommen, in dem ich die Wörter „zweiten“ und „vierten“ durch die jeweiligen Zahlen ersetzt habe. Nichts aufregendes. Ein Vergleich dieser Änderungen mittels git diff
ergibt das Ergebnis, das in Abbildung 1 abgebildet ist.
Die gelöschten Zeilen werden rot, die hinzugefügten grün dargestellt. So einfach das Beispiel auch ist, zeigt sich hier schon ein erstes Problem. Es sieht so aus, als ob die ganzen Zeilen ausgetauscht wurden. Erst auf den zweiten Blick fallen die konkreten Änderungen an den beiden Wörtern auf. Abhilfe schafft der Parameter --color-words
, der git diff
übergeben werden kann. Dadurch werden nur die geänderten Wörter hervorgehoben, was in Abbildung 2 zu sehen ist.
Das ist deutlich übersichtlicher. Da ich diese Einstellung von git diff
relativ häufig verwende, lohnt sich ein Alias dafür. Der kann ganz einfach über das folgende Kommando angelegt werden.
git config –global alias.wdiff diff –color-words
Und schon steht der Alias wdiff
global zur Verfügung.
Visuelle Werkzeuge
Als Alternative dazu ist auch der Einsatz von visuellen Werkzeugen möglich. In diesem Fall möchte ich gerne spezielle diff-Skripte vorstellen. Diese werden sowohl mit TortoiseGit als auch TortoiseSVN installiert. Alternativ können die Skripte aber auch direkt heruntergeladen werden. Ob von TortoiseGit oder TortoiseSVN spielt dabei keine Rolle. Der Link für zur TortoiseSVN-Website.
Zuerst ist noch eine Einstellung in der Git-Konfiguration notwendig, damit die genannten Skripte auch verwendet werden. Das folgende Gist zeigt die vier Zeilen, die in eine lokale oder globale Konfigurationsdatei eingetragen werden müssen.
[gist id=7416057 file=git-config.txt]
Damit wird ein neues Tool in der Konfigurationsdatei eingeführt, das ab jetzt bei einem Aufruf von git diff
durch den Kommandozeilenaufruf
git difftool -t wdiff Dokument.docx
gestartet wird. Da ein externes Skript ausgeführt wird, erscheint noch eine kurze Abfrage, ob das auch gewollt ist (Abbildung 3).
Anschließend öffnet sich eine Word-Instanz mit dem angegebenen Dokument (Abbildung 4). Auf der rechten Seite ist das Originaldokument aus dem vorherigen Commit und das überarbeitete Dokument aufgelistet.
Auf der linken Seite gibt es eine Übersicht über alle Änderungen. In der Mitte wird das aktuelle Dokument mit den markierten Abweichungen angezeigt. Bei komplexeren Dokumenten ist diese Ansicht sehr von Vorteil und erlaubt einen guten Überblick über das, was geändert wurde.
Fazit
Neben einem einfachen diff
mit und ohne hervorgehobenen Wörtern, erlaubt Git auch eine komplexeren Übersicht mittels diff-Skripte. Das funktioniert nicht nur bei Word-Dokumenten, sondern beispielsweise auch für odt-, ppt- und xls-Dateien. Zusätzlich sind Merge-Skripte vorhanden, diese allerdings nur für doc- und ods-Dateien.
Ob diese Übersicht nützlich ist oder nicht, muss jeder für sich entscheiden. Ich finde sie bei größeren Dokumenten oft hilfreich, bemühe – in der Regel – vorher aber den Alias wdiff
. Je nach Umfang der Änderungen reicht das schon aus.
Das verwendete Git-Repository kann als 7zip-Datei heruntergeladen werden, um die gezeigten Beispiele selbst ausprobieren zu können. Die meisten der oben gezeigten Einstellungen habe ich lokal durchgeführt, sind also direkt im Repository gespeichert.
Blöde Frage, aber wie hast du es hinbekommen, dass „git diff“, von Haus aus, auf Word-Dokumente anwendbar ist? Das sind doch gezipte Archive! Benutzt du für das erste diff schon ein externes Tool? Wenn ja welches?
LG
Hi phreeek,
hm ne, dass funktioniert von Haus aus bei mir. Ich kann mich nicht erinnern, dafür irgendetwas konfiguriert, geschweige denn installiert zu haben.
Welche Git-Version hast du denn? Ich habe es mit der 1.8.0 gerade noch einmal ausprobiert. Funktioniert tadellos. Allerdings mit docx-Dateien. Keine Ahnung ob das eine Auswirkung hat, wenn ein älteres Format vorhanden ist.
Viele Grüße,
Fabian
Hi,
benutze die Version 1.8.52. Bei mir klappt das allerdings nicht. Kannst du die docx-Dateien auch mergen? Ich werde die Tage, mal die alte Version 1.8.0 ausprobieren und schauen, ob es damit wirklich klappt. Vllt klappt es mit der neuen 1.9.2 ja auch. Momentan muss ich auf externe Tools zurückgreifen. Meine .gitconfig sieht momentan so aus:
Ich wollte eigentlich opc-diag (https://github.com/python-openxml/opc-diag) ausprobieren, aber ich bekommen unter Windows lxml für python nicht in der entsprechenden Version kompiliert. o.O
Vielen Dank für diesen äußerst nützlichen Artikel!
Kleiner Korrekturvorschlag
git config --global alias.wdiff "diff --color-words"
Und nochmal zur sicherheit als prosa: minus-minus vor global und color, Anführungszeichen rund ums kommando, sonst kommt nur der „diff“ mit in die .gitconfig. Achtung: WordPress kombiniert minus-minus zu einem langen Gedankenstrich, selbst wenn man es in code-tags packt. :-]
Hallo Jochen,
vielen Dank für deinen Kommentar und den Verbesserungsvorschlag. Wirklich sehr nützlich!
Viele Grüße,
Fabian