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 textconv
Konfigurationsoption 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 -v
sowohl 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/config
Datei Ihres Repositorys oder in Ihrer persönlichen globalen ~/.gitconfig
Datei definieren, z. B. einen hexadezimalen diff-Befehl mit den hexdump
folgenden Befehlen :
[diff "hex"]
textconv = hexdump -v -C
binary = true
Als nächstes müssen Sie die .gitattributes
Datei 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 .gitignore
Datei sollte die .gitattributes
Datei 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.
.gitattributes
global einstellen (entsprechend den [diff]
Einträgen in Ihrem Global .gitconfig
). Wenn Sie das .gitattributes
lokale zum Repo machen, muss der Benutzer seine lokalen .gitconfig
Repo-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 .gitconfig
unter [core]
add attributesfile = c:/users/<username>/.gitattributes
oder 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, vimdiff
aber 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.