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 ?
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 ?
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
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.
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.
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.
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.