Per diffondere file binari in git, suppongo di dover impostare un difftool.
Cosa funzionano i difftools? Come si inseriscono i parametri?
Per diffondere file binari in git, suppongo di dover impostare un difftool.
Cosa funzionano i difftools? Come si inseriscono i parametri?
Risposte:
È possibile impostare textconv
un'opzione di configurazione per un tipo di file. Vedere "Esecuzione di diff di testo di file binari" in gitattributes (5) . Quello che dovresti usare dipende dal tipo di file.
Esempio 1 :
Supponiamo che tu voglia diffondere il contenuto dei file zip. In tal caso, inserire quanto segue nel file $ GIT_DIR / config o $ HOME / .gitconfig.
[diff "zip"]
textconv = unzip -v
La prossima volta che chiedi un diff su un file zip in un repository, chiamerà unzip -v
su entrambe le versioni e diff il testo risultante.
Esempio 2 :
Per i file pdf è possibile utilizzare ad esempio pdfinfo
;
[diff "pdf"]
textconv = pdfinfo
Esempio 3 :
Se non esiste un'utilità di informazione specifica per un tipo di file, puoi ad esempio usare hexdump
(viene fornito con FreeBSD e OSX, disponibile anche su Linux):
[diff "bin"]
textconv = hexdump -v -C
La risposta di Roland Smith è stata utile ma al momento è incompleta (vedere i commenti): ci sono due parti in questo.
Puoi definire un nuovo comando diff nel .git/config
file del tuo repository o nel tuo ~/.gitconfig
file globale personale , ad esempio un comando diff esadecimale usando hexdump
:
[diff "hex"]
textconv = hexdump -v -C
binary = true
Successivamente, devi usare il .gitattributes
file del repository per dire a git quali file dovrebbero essere usati con questo speciale comando diff:
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
Come il .gitignore
file, il .gitattributes
file deve essere archiviato nel repository.
Nel mio caso ho diverse estensioni di file che voglio trattare come binarie (ad esempio, evitare conversioni di fine riga se si utilizza git su Windows) e vedere anche eventuali differenze tramite hexdump
:
https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d
Vedi anche https://github.com/resin-io/etcher/pull/1367 per un altro esempio che definisce un comando diff hexdump da usare con i file di immagine.
.gitattributes
globale (per andare con le [diff]
voci nel tuo globale .gitconfig
). Se si effettua il .gitattributes
locale sul repository, l'utente dovrà modificare le .gitconfig
impostazioni del repository locale perché per motivi di sicurezza non verranno trasferite sul telecomando. Ad ogni modo, ogni utente deve aggiornare i propri file / configurazioni locali in qualche modo per abilitare questo comportamento. In .gitconfig
sotto [core]
aggiungi attributesfile = c:/users/<username>/.gitattributes
o dove vuoi memorizzarlo se lo rendi globale (nota le ciglia, anche in Windows).
Quanto sopra sono modi completi per farlo .. tuttavia, se hai solo bisogno di farlo per alcuni file, il seguente metodo è quello che uso:
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
Qui sto usando vimdiff
ma puoi usare qualsiasi altro strumento. Quanto sopra può anche essere combinato in un piccolo script se è necessario farlo più e più volte.