Um Binärdateien in git zu unterscheiden, gehe ich davon aus, dass ich ein difftool einrichten muss.
Welche difftools funktionieren? Wie stellst du die Parameter ein?
Um Binärdateien in git zu unterscheiden, gehe ich davon aus, dass ich ein difftool einrichten muss.
Welche difftools funktionieren? Wie stellst du die Parameter ein?
Antworten:
Sie können eine textconvKonfigurationsoption für einen Dateityp festlegen. Siehe "Durchführen von Textdifferenzen von Binärdateien" in gitattributes (5) . Was Sie verwenden sollten, hängt vom Dateityp ab.
Beispiel 1 :
Angenommen, Sie möchten den Inhalt von ZIP-Dateien unterscheiden. In diesem Fall sollten Sie Folgendes in die Datei $ GIT_DIR / config oder $ HOME / .gitconfig einfügen.
[diff "zip"]
textconv = unzip -v
Wenn Sie das nächste Mal nach einem Unterschied für eine Zip-Datei in einem Repository fragen, wird unzip -vsowohl die Version als auch der resultierende Text unterschieden.
Beispiel 2 :
Für PDF-Dateien können Sie zB verwenden pdfinfo;
[diff "pdf"]
textconv = pdfinfo
Beispiel 3 :
Wenn es für einen Dateityp kein spezielles Informationsdienstprogramm gibt, können Sie z. B. Folgendes verwenden hexdump(im Lieferumfang von FreeBSD und OSX enthalten, auch unter Linux verfügbar):
[diff "bin"]
textconv = hexdump -v -C
Die Antwort von Roland Smith war hilfreich, ist aber derzeit unvollständig (siehe Kommentare) - dazu gibt es zwei Teile.
Sie können neue diff-Befehle in der .git/configDatei Ihres Repositorys oder in Ihrer persönlichen globalen ~/.gitconfigDatei definieren, z. B. einen hexadezimalen diff-Befehl mit den hexdumpfolgenden Befehlen :
[diff "hex"]
textconv = hexdump -v -C
binary = true
Als nächstes müssen Sie die .gitattributesDatei des Repositorys verwenden, um git mitzuteilen, welche Dateien mit diesem speziellen diff-Befehl verwendet werden sollen:
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
Wie die .gitignoreDatei sollte die .gitattributesDatei in Ihr Repository eingecheckt werden.
In meinem Fall habe ich mehrere verschiedene Dateierweiterungen, die ich als binär behandeln möchte (z. B. Vermeiden Sie Konvertierungen am Zeilenende, wenn Sie Git unter Windows verwenden) und sehen Sie auch Unterschiede über hexdump:
https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d
Unter https://github.com/resin-io/etcher/pull/1367 finden Sie ein weiteres Beispiel für die Definition eines Befehls hexdump diff zur Verwendung mit Bilddateien.
.gitattributesglobal einstellen (entsprechend den [diff]Einträgen in Ihrem Global .gitconfig). Wenn Sie das .gitattributeslokale zum Repo machen, muss der Benutzer seine lokalen .gitconfigRepo-Einstellungen ändern, da diese aus Sicherheitsgründen nicht auf die Fernbedienung übertragen werden. In beiden Fällen muss jeder Benutzer seine lokalen Dateien / Konfigurationen aktualisieren, um dieses Verhalten zu aktivieren. In .gitconfigunter [core]add attributesfile = c:/users/<username>/.gitattributesoder wo immer Sie es speichern möchten, wenn Sie es global machen (beachten Sie die Schrägstriche, auch in Windows).
Die oben genannten Möglichkeiten sind umfassend. Wenn Sie dies jedoch nur für einige Dateien tun müssen, verwende ich die folgende Methode:
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
Hier verwende ich, vimdiffaber Sie können jedes andere Werkzeug verwenden. Das Obige kann auch zu einem kleinen Skript kombiniert werden, wenn Sie dies immer und immer wieder tun müssen.