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 textconv
option 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 -v
les 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/config
fichier de votre référentiel ou votre ~/.gitconfig
fichier global personnel , par exemple une commande hex diff en utilisant hexdump
:
[diff "hex"]
textconv = hexdump -v -C
binary = true
Ensuite, vous devez utiliser le .gitattributes
fichier 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 .gitignore
fichier, le .gitattributes
fichier 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.
.gitattributes
globalement (pour accompagner les [diff]
entrées dans votre global .gitconfig
). Si vous effectuez le .gitattributes
local sur le référentiel, l'utilisateur devra modifier ses .gitconfig
paramè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 .gitconfig
under [core]
add attributesfile = c:/users/<username>/.gitattributes
ou 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 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 le faire encore et encore.