Afin de différencier les fichiers binaires dans git, je suppose que je dois configurer un outil diff.
Quels outils difftools fonctionnent? Comment placez-vous les paramètres?
Afin de différencier les fichiers binaires dans git, je suppose que je dois configurer un outil diff.
Quels outils difftools fonctionnent? Comment placez-vous les paramètres?
Réponses:
Vous pouvez définir une textconvoption de configuration pour un type de fichier. Voir "Exécution de différences de texte de fichiers binaires" dans gitattributes (5) . Ce que vous devez utiliser dépend du type de fichier.
Exemple 1 :
Supposons que vous souhaitiez différencier le contenu des fichiers zip. Dans ce cas, vous devez mettre ce qui suit dans le fichier $ GIT_DIR / config ou $ HOME / .gitconfig.
[diff "zip"]
textconv = unzip -v
La prochaine fois que vous demanderez un diff sur un fichier zip dans un repo, il appellera unzip -vles deux versions et diff le texte résultant.
Exemple 2 :
Pour les fichiers pdf, vous pouvez utiliser par exemple 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 diff dans le .git/configfichier de votre référentiel ou votre ~/.gitconfigfichier global personnel , par exemple une commande hex diff en utilisant hexdump:
[diff "hex"]
textconv = hexdump -v -C
binary = true
Ensuite, vous devez utiliser le .gitattributesfichier du référentiel pour indiquer à git quels fichiers doivent être utilisés avec cette commande spéciale diff:
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
Comme le .gitignorefichier, le .gitattributesfichier doit être archivé dans votre référentiel.
Dans mon cas, j'ai plusieurs extensions de fichiers différentes que je veux traiter comme binaires (par exemple, évitez toute conversion de fin de ligne si vous utilisez git sous Windows), et voyez également toutes 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 image.
.gitattributesglobalement (pour accompagner les [diff]entrées dans votre global .gitconfig). Si vous effectuez le .gitattributeslocal sur le référentiel, l'utilisateur devra modifier ses .gitconfigparamètres de référentiel local car, pour des raisons de sécurité, ceux-ci ne seront pas poussés vers la télécommande. Dans tous les cas, chaque utilisateur doit mettre à jour ses fichiers / config locaux pour activer ce comportement. Dans .gitconfigunder [core]add attributesfile = c:/users/<username>/.gitattributesou où vous voulez le stocker si vous le rendez global (notez les barres obliques, même dans les fenêtres).
Ce qui précède est un moyen complet de le faire .. cependant, si vous avez juste besoin de le faire 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 vimdiffmais 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 le faire encore et encore.