← Blog

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 \.config\git\attributes, wobei das Home-Verzeichnis Ihres Windows-Benutzerkontos ist (C:\Users\).

  1. Ö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 -a
    

    Diese Konfiguration weist Git an, beim Diff mit dem Befehl unzip die ZIP-Datei in ASCII-Text umzuwandeln.

  2. Erstellen oder ändern Sie die Datei YOUR_GIT_REPOSITORY/.gitattributes oder ~/.config/git/attributes und fügen Sie folgende Zeilen hinzu:

    *.pptx diff=zip
    *.docx diff=zip
    *.epub diff=zip
    *.odt diff=zip
    

    Diese 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:

  1. Fügen Sie folgende Zeilen in Ihre Datei $HOME/.config/git/attributes ein:

    *.doc diff=doc
    *.xls diff=xls
    *.xlsx diff=xls
    *.ppt diff=ppt
    

    Damit werden diese Dateiendungen bestimmten Diff-Konfigurationen zugeordnet.

  2. Fügen Sie Folgendes in Ihre globale Konfigurationsdatei $HOME/.gitconfig oder $HOME/.config/git/config ein:

    [diff "word"]
      textconv = catdoc
      binary = true
    [diff "xls"]
      textconv = xls2csv
      binary = true
    [diff "ppt"]
      textconv = catppt
      binary = true
    

    Diese 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:

  1. Fügen Sie in Ihrer attributes-Datei hinzu:

    *.odt diff=odt
    

    Damit wird die Dateiendung .odt der Diff-Konfiguration zugeordnet.

  2. Fügen Sie in Ihrer config-Datei hinzu:

    [diff "odt"]
        textconv = odt2txt
        binary = true
    

    Diese Konfiguration wandelt .odt-Dateien für den Diff mit odt2txt um.

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:

  1. 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 ~/.gitconfig oder in .git/config Ihres Repositorys ein:

    [diff "sqlite3"]
      binary = true
      textconv = "echo .dump | sqlite3"
    
  2. 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: