git diff für epub-Dateien
epub-, docx-, pptx- und SQLite-Dateien in Git nachverfolgen
Ich bin kein grosser Fan von Binärformaten, weil sich Änderungen daran schwer nachverfolgen lassen. Zum Glück gibt es Wege, Binärdateien wie epub, docx, pptx und sogar SQLite-Datenbanken in Git handhabbarer zu machen. In diesem Artikel sehen wir uns Techniken an, um diese Binärformate mit git diff zu vergleichen und unter Versionskontrolle zu stellen.
Git-Konfiguration für verschiedene Binärformate
ZIP-basierte Dateiformate nachverfolgen
Wie in einem Artikel von tante.cc erwähnt, sind manche Binärformate wie docx und pptx im Grunde gezippte Pakete von XML-Dateien, sodass eine Art Diff möglich ist. Damit Git mit diesen Formaten umgehen kann, gehen Sie so vor:
Für Windows-Nutzer: Unter Windows entspricht der Pfad ~/.config/git/attributes dem Pfad
-
Öffnen Sie Ihre Datei
~/.gitconfig(legen Sie sie an, falls sie noch nicht existiert) und fügen Sie folgenden Abschnitt hinzu:[diff "zip"] textconv = unzip -c -aDiese Konfiguration weist Git an, beim Diff mit dem Befehl
unzipdie ZIP-Datei in ASCII-Text umzuwandeln. -
Erstellen oder ändern Sie die Datei
YOUR_GIT_REPOSITORY/.gitattributesoder~/.config/git/attributesund fügen Sie folgende Zeilen hinzu:*.pptx diff=zip *.docx diff=zip *.epub diff=zip *.odt diff=zipDiese Zeilen legen fest, welche Dateiendungen Git als ZIP-Formate für den Diff behandeln soll.
Wenn Sie jetzt git diff verwenden, entpackt Git diese Dateien automatisch und zeigt Ihnen die Unterschiede als ASCII-Text. So lassen sich Änderungen in diesen Binärformaten leichter nachverfolgen.
Ältere Microsoft-Office-Dateien
Auch für Microsoft-Office-Dateien wie .doc, .xls und .ppt können Sie Git konfigurieren. Die Schritte:
-
Fügen Sie folgende Zeilen in Ihre Datei
$HOME/.config/git/attributesein:*.doc diff=doc *.xls diff=xls *.xlsx diff=xls *.ppt diff=pptDamit werden diese Dateiendungen bestimmten Diff-Konfigurationen zugeordnet.
-
Fügen Sie Folgendes in Ihre globale Konfigurationsdatei
$HOME/.gitconfigoder$HOME/.config/git/configein:[diff "word"] textconv = catdoc binary = true [diff "xls"] textconv = xls2csv binary = true [diff "ppt"] textconv = catppt binary = trueDiese Konfigurationen verwenden für jedes Dateiformat einen eigenen Textkonverter, damit die Diffs besser lesbar sind.
Ältere OpenOffice-Dateien
Wenn Sie OpenOffice nutzen, gehen Sie ähnlich vor wie bei Microsoft-Office-Dateien:
-
Fügen Sie in Ihrer attributes-Datei hinzu:
*.odt diff=odtDamit wird die Dateiendung .odt der Diff-Konfiguration zugeordnet.
-
Fügen Sie in Ihrer config-Datei hinzu:
[diff "odt"] textconv = odt2txt binary = trueDiese Konfiguration wandelt .odt-Dateien für den Diff mit
odt2txtum.
PDF-Dateien
Sogar PDF-Dateien lassen sich mit Git verwalten. Nehmen Sie dazu folgende Änderungen in Ihrer attributes-Datei vor:
*.pdf diff=pdf
Und in Ihrer config-Datei:
[diff "pdf"]
textconv = pdf2txt.py
binary = true
Mit dieser Konfiguration extrahiert Git für Diffs den Text aus PDFs.
Änderungen an SQLite-Datenbanken nachverfolgen
SQLite-Datenbanken sind Binärdateien, und Änderungen daran nachzuverfolgen kann schwierig sein. Trotzdem erhalten Sie in Git aussagekräftige Diffs für SQLite-Datenbanken. So geht es:
-
Fügen Sie Ihrer Konfiguration einen Diff-Typ namens «sqlite3» hinzu:
git config diff.sqlite3.binary true git config diff.sqlite3.textconv "echo .dump | sqlite3"Alternativ fügen Sie diesen Ausschnitt in Ihre
~/.gitconfigoder in.git/configIhres Repositorys ein:[diff "sqlite3"] binary = true textconv = "echo .dump | sqlite3" -
Erstellen Sie eine Datei namens
.gitattributes, falls sie noch nicht vorhanden ist, und fügen Sie diese Zeile hinzu:*.sqlite diff=sqlite3
Wenn Sie jetzt git diff oder einen anderen Git-Befehl ausführen, der einen Diff einer SQLite-Datei erzeugt, sehen Sie einen sauber formatierten Diff der Änderungen. So lassen sich Änderungen an SQLite-Datenbanken leichter nachverfolgen.
Fazit
In diesem Artikel haben wir verschiedene Techniken kennengelernt, um Binärformate wie epub, docx, pptx und SQLite-Datenbanken in Git zu handhaben. Indem Sie Git so konfigurieren, dass es bestimmte Textkonverter und Diff-Strategien nutzt, machen Sie diese Binärdateien handhabbarer und sehen ihre Änderungen besser. So können Sie in Ihren Git-Repositorys eine grössere Bandbreite an Dateiformaten wirksam nachverfolgen und versionieren.
Weitere Informationen und Anpassungsmöglichkeiten finden Sie in den angegebenen Quellen und in der Git-Dokumentation:
- Customizing Git Attributes (Git Book - English)
- Git advanced (text) diff: .odt, .pdf, .doc, .xls, .ppt – Maxime Bréhin (Medium)
- Tracking SQLite Database Changes in Git – Garrit’s Notes
- Simon Willison auf Hacker News über das Speichern von SQLite als Text in git
- sqlite-diffable – ein Werkzeug für Datasette