57 votes

Comment puis-je différencier des fichiers binaires dans git ?

Afin de différencier des fichiers binaires dans git, je suppose que je dois mettre en place un difftool.

Quels difftools fonctionnent ? Comment introduire les paramètres ?

37voto

MyCwoissant Points 31

Vous pouvez définir un textconv option de configuration pour un type de fichier. Voir "Exécuter des différences de texte de fichiers binaires" dans le document gitattributs(5) . Ce que vous devez utiliser dépend du type de fichier.

Exemple 1 :

Disons que vous voulez différencier le contenu des fichiers zip. Dans ce cas, vous devez mettre dans l'un des fichiers suivants $XDG_CONFIG_HOME/git/config o $HOME/.gitconfig o $GIT_DIR/config .

[diff "zip"]
    textconv = unzip -v

La prochaine fois que vous demanderez un diff sur un fichier zip dans un repo, il appellera unzip -v sur les deux versions et diff le texte résultant.

Exemple 2 :

Pour les fichiers pdf, vous pouvez utiliser, par exemple, les éléments suivants pdfinfo ;

[diff "pdf"]
    textconv = pdfinfo

Exemple 3 :

S'il n'y a pas d'utilitaire d'information spécifique pour un type de fichier, vous pouvez par exemple utiliser hexdump (livré avec FreeBSD et OSX, également disponible sur Linux) :

[diff "bin"]
    textconv = hexdump -v -C

37voto

chestozo Points 471

Si vous voulez forcer git à montrer la différence des fichiers binaires comme une différence en texte brut, utilisez --text comme suit :

git diff --text

26voto

dosentmatter Points 131

La réponse de Roland Smith a été utile mais est actuellement incomplète (voir les commentaires) - il y a deux parties à cela.

Vous pouvez définir une nouvelle commande de comparaison dans le fichier .git/config ou votre fichier global personnel $XDG_CONFIG_HOME/git/config/.gitconfig (généralement $HOME/.gitconfig ), par exemple une commande diff hexa utilisant hexdump :

[diff "hex"]
    textconv = hexdump -v -C
    binary = true

Ensuite, vous devez utiliser la fonction .gitattributes pour indiquer à git quels fichiers doivent être utilisés avec cette commande de comparaison spéciale :

# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex

Comme le .gitignore le fichier .gitattributes doit être enregistré dans votre dépôt.

Dans mon cas, j'ai plusieurs extensions de fichiers différentes que je veux traiter comme des fichiers binaires (par exemple, pour éviter toute conversion de fin de ligne si j'utilise git sous Windows), et également voir les différences via hexdump :

https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d

Voir aussi https://github.com/resin-io/etcher/pull/1367 pour un autre exemple définissant une commande diff hexdump à utiliser avec des fichiers images.

5voto

qwr Points 419

Pour créer un patch binaire un correctif qui fonctionne pour les fichiers binaires au lieu de simplement dire "Les fichiers binaires diffèrent", utilisez

git diff --binary file1 file2

Cela produit un "patch binaire GIT" utilisant uniquement des caractères ASCII (contrairement à --text ), convenant à l'envoi de courriels.

-1voto

alpha_989 Points 893

Les méthodes ci-dessus sont très complètes, mais si vous n'avez besoin de le faire que pour quelques fichiers, la méthode suivante est celle que j'utilise :

git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file

Ici, j'utilise vimdiff mais vous pouvez utiliser n'importe quel autre outil. Ce qui précède peut également être combiné dans un petit script si vous avez besoin de faire cela encore et encore.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X