Git für Binärdateien¶
git diff lässt sich konfigurieren, sodass es auch bei Binärdateien sinnvolle
Diffs anzeigen kann.
… für Excel-Dateien¶
Hierfür benötigen wir openpyxl und pandas:
$ uv add openpyxl pandas
Anschließend können wir in exceltocsv.py
pandas.DataFrame.to_csv zum Konvertieren der
Excel-Dateien verwenden:
import sys
from io import StringIO
import pandas as pd
for sheet_name in pd.ExcelFile(sys.argv[1]).sheet_names:
output = StringIO()
print(f"Sheet: {sheet_name}")
pd.read_excel(sys.argv[1], sheet_name=sheet_name).to_csv(
output,
header=True,
index=False,
)
print(output.getvalue())
Nun fügt ihr noch in der globalen Git-Konfiguration in der Datei
~/.config/git/config den folgenden Abschnitt hinzu:
[diff "excel"]
textconv=python3 /PATH/TO/exceltocsv.py
binary=true
Schließlich wird in der globalen ~/.config/git/attributes-Datei unser
excel-Konverter mit *.xlsx-Dateien verknüpft:
*.xlsx diff=excel
… für PDF-Dateien¶
Hierfür wird zusätzlich pdftohtml benötigt. Ihr installiert es mit
$ sudo apt install poppler-utils
$ brew install pdftohtml
Anschließend fügt ihr den folgenden Abschnitt der globalen Git-Konfiguration in
der Datei ~/.config/git/config hinzu:
[diff "pdf"]
textconv=pdftohtml -stdout
Schließlich wird in der globalen ~/.config/git/attributes-Datei unser
pdf-Konverter mit *.pdf-Dateien verknüpft:
*.pdf diff=pdf
Nun wird beim Aufruf von git diff die PDF-Datei zunächst konvertiert und
dann ein Diff über den Ausgaben des Konverters durchgeführt.
… für Dokumente¶
Auch Unterschiede in Dokumenten lassen sich anzeigen. Hierfür kann Pandoc verwendet werden, das einfach installiert werden kann mit
$ sudo apt install pandoc
$ brew install pandoc
Herunterladen und Installieren der aktuellen .msi-Datei von GitHub.
Anschließend wird der globalen Git-Konfiguration ~/.config/git/config
folgender Abschnitt hinzugefügt:
[diff "pandoc-to-markdown"]
textconv = pandoc --to markdown
cachetextconv = true
Schließlich wird in der globalen ~/.config/git/attributes-Datei unser
pandoc-to-markdown-Konverter mit *.docx, *.odt und
*.rtf-Dateien verknüpft:
*.docx diff=pandoc-to-markdown
*.odt diff=pandoc-to-markdown
*.rtf diff=pandoc-to-markdown
Tipp
Jupyter Notebooks schreiben in eine JSON-Datei *.ipynb, die ziemlich dicht und insbesondere bei Diffs schwer zu lesen ist. Die Markdown-Darstellung von Pandoc vereinfact dies:
*.ipynb diff=pandoc-to-markdown
Die gleiche Vorgehensweise kann auch angewandt werden, um nützliche Diffs von
anderen Binärdateien zu erhalten, z.B. *.zip,
*.jar und andere Archive mit unzip oder für Änderungen in den
Metainformationen von Bildern mit exiv2. Zudem gibt es
Konvertierungswerkzeuge für die Umwandlung von *.odt, *.doc und
anderen Dokumentenformaten in einfachen Text. Für Binärdateien, für die es
keinen Konverter gibt, reichen oft auch Strings aus.
… für Medien-Dateien¶
ExifTool kann verwendet werden um die Metadaten der Medien-Dateien in Text zu konvertieren.
$ sudo apt install libimage-exiftool-perl
$ brew install exiftool
> choco install exiftool
Siehe auch
Anschließend könnt ihr in der globalen Git-Konfigurationsdatei
~/.config/git/config folgenden Abschnitt hinzufügen:
[diff "exiftool"]
textconv = exiftool --composite -x 'Exiftool:*'
cachetextconv = true
xfuncname =
"^-.*$"
Schließlich wird in der ~/.config/git/attributes der
exiftool-Konverter mit Datei-Endungen von Medien-Dateien verknüpft:
*.avif diff=exiftool
*.bmp diff=exiftool
*.gif diff=exiftool
*.jpeg diff=exiftool
*.jpg diff=exiftool
*.png diff=exiftool
*.webp diff=exiftool
Siehe auch
exiftool kann noch viele weitere Medien-Dateien verarbeiten. Eine
vollständige Liste erhaltet ihr in Supported File Types.