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 `_: .. code-block:: console $ uv add openpyxl pandas Anschließend können wir in :file:`exceltocsv.py` :doc:`pandas:reference/api/pandas.DataFrame.to_csv` zum Konvertieren der Excel-Dateien verwenden: .. literalinclude:: exceltocsv.py :caption: exceltocsv.py :name: exceltocsv.py :language: python :lines: 5- Nun fügt ihr noch in der globalen Git-Konfiguration in der Datei :file:`~/.config/git/config` den folgenden Abschnitt hinzu: .. code-block:: ini [diff "excel"] textconv=python3 /PATH/TO/exceltocsv.py binary=true Schließlich wird in der globalen :file:`~/.config/git/attributes`-Datei unser ``excel``-Konverter mit :file:`*.xlsx`-Dateien verknüpft: .. code-block:: ini *.xlsx diff=excel … für PDF-Dateien ----------------- Hierfür wird zusätzlich ``pdftohtml`` benötigt. Ihr installiert es mit .. tab:: Debian/Ubuntu .. code-block:: console $ sudo apt install poppler-utils .. tab:: macOS .. code-block:: console $ brew install pdftohtml Anschließend fügt ihr den folgenden Abschnitt der globalen Git-Konfiguration in der Datei :file:`~/.config/git/config` hinzu: .. code-block:: ini [diff "pdf"] textconv=pdftohtml -stdout Schließlich wird in der globalen :file:`~/.config/git/attributes`-Datei unser ``pdf``-Konverter mit :file:`*.pdf`-Dateien verknüpft: .. code-block:: ini *.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 .. tab:: Debian/Ubuntu .. code-block:: console $ sudo apt install pandoc .. tab:: macOS .. code-block:: console $ brew install pandoc .. tab:: Windows Herunterladen und Installieren der aktuellen :file:`.msi`-Datei von `GitHub `_. Anschließend wird der globalen Git-Konfiguration :file:`~/.config/git/config` folgender Abschnitt hinzugefügt: .. code-block:: ini [diff "pandoc-to-markdown"] textconv = pandoc --to markdown cachetextconv = true Schließlich wird in der globalen :file:`~/.config/git/attributes`-Datei unser ``pandoc-to-markdown``-Konverter mit :file:`*.docx`, :file:`*.odt` und :file:`*.rtf`-Dateien verknüpft: .. code-block:: ini *.docx diff=pandoc-to-markdown *.odt diff=pandoc-to-markdown *.rtf diff=pandoc-to-markdown .. tip:: :doc:`Jupyter Notebooks ` schreiben in eine JSON-Datei :ref:`*.ipynb `, die ziemlich dicht und insbesondere bei Diffs schwer zu lesen ist. Die Markdown-Darstellung von Pandoc vereinfact dies: .. code-block:: ini *.ipynb diff=pandoc-to-markdown Die gleiche Vorgehensweise kann auch angewandt werden, um nützliche Diffs von anderen Binärdateien zu erhalten, :abbr:`z.B. (zum Beispiel)` ``*.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 :file:`*.odt`, :file:`*.doc` und anderen Dokumentenformaten in einfachen Text. Für Binärdateien, für die es keinen Konverter gibt, reichen oft auch Strings aus. .. _exiftool: … für Medien-Dateien -------------------- `ExifTool `_ kann verwendet werden um die Metadaten der Medien-Dateien in Text zu konvertieren. .. tab:: Debian/Ubuntu .. code-block:: console $ sudo apt install libimage-exiftool-perl .. tab:: macOS .. code-block:: console $ brew install exiftool .. tab:: Windows .. code-block:: ps1 > choco install exiftool .. seealso:: * `Installing ExifTool `_ Anschließend könnt ihr in der globalen Git-Konfigurationsdatei :file:`~/.config/git/config` folgenden Abschnitt hinzufügen: .. code-block:: ini [diff "exiftool"] textconv = exiftool --composite -x 'Exiftool:*' cachetextconv = true xfuncname = "^-.*$" Schließlich wird in der :file:`~/.config/git/attributes` der ``exiftool``-Konverter mit Datei-Endungen von Medien-Dateien verknüpft: .. code-block:: ini *.avif diff=exiftool *.bmp diff=exiftool *.gif diff=exiftool *.jpeg diff=exiftool *.jpg diff=exiftool *.png diff=exiftool *.webp diff=exiftool .. seealso:: ``exiftool`` kann noch viele weitere Medien-Dateien verarbeiten. Eine vollständige Liste erhaltet ihr in `Supported File Types `_.