115 votes

Mettre en évidence les lignes modifiées et les octets modifiés dans chaque ligne modifiée

Projet Open Source Trac a un excellent surligneur de différences - il met en évidence les lignes modifiées et des octets modifiés dans chaque ligne modifiée ! Voir aquí ou aquí par exemple.

Est-il possible d'utiliser la même couleur de mise en évidence (c'est-à-dire les lignes modifiées) ? et a également modifié les octets ) dans le terminal bash, git ou vim pour la sortie du diff (fichier patch) ?

79voto

s1n4 Points 400

Le diff-highlight Perl contrib script produit un résultat si similaire à celui des captures d'écran de Trac qu'il est probable que Trac l'utilise :

screenshot of diff-highlight in use

Installer avec :

wget https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight && chmod +x diff-highlight

Déplacer le fichier diff-highlight à la ~/bin/ (ou à l'endroit où se trouve votre $PATH est), puis ajoutez ce qui suit à votre ~/.gitconfig :

[pager]
    diff = diff-highlight | less
    log = diff-highlight | less
    show = diff-highlight | less

Installation d'un simple copier-coller suggérée par @cirosantilli :

cd ~/bin
curl -O https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight
chmod +x diff-highlight
git config --global pager.log 'diff-highlight | less'
git config --global pager.show 'diff-highlight | less'
git config --global pager.diff 'diff-highlight | less'
git config --global interactive.diffFilter diff-highlight

54voto

anydot Points 933

Lors de l'utilisation de git diff ou git log et éventuellement d'autres, utiliser l'option --word-diff=color (il existe également d'autres modes pour les différences de mots)

29voto

Tom Hale Points 5950

diff-so-fancy est un diff -Un surligneur conçu pour les yeux humains.

Il supprime le premier + / - qui sont gênants pour le copier/coller et qui créent des sections claires entre les fichiers.

Coloré git (à gauche) vs diff-so-fancy (à droite - notez les surbrillances au niveau du personnage) :

diff-so-fancy output

Si vous souhaitez que le diff-so-fancy (côté droit), mais non limité aux fichiers d'un fichier git ajoutez la fonction suivante à votre référentiel .bashrc pour l'utiliser sur n'importe quel fichier :

dsf() { git diff --no-index --color "$@" | diff-so-fancy; }

Eg :

dsf original changed-file

Mise en évidence du niveau des personnages et norme diff format

Si vous n'aimez pas le formatage non standard de diff-so-fancy mais veulent quand même un niveau de personnage git la mise en évidence, l'utilisation diff-highlight qui prendra git et produire le très joli standard diff -format de sortie :

diff-highlight screenshot

Pour l'utiliser par défaut à partir de git , ajoutez à votre .gitconfig :

[color "diff-highlight"]
  oldNormal = red bold
  oldHighlight = red bold 52
  newNormal = green bold
  newHighlight = green bold 22

[pager]
  diff = diff-highlight | less -FRXsu --tabs=4

Le [pager] La section raconte git pour acheminer sa sortie déjà colorée vers diff-highlight qui colore au niveau des caractères, puis met en page la sortie en moins (si nécessaire), plutôt que d'utiliser le format par défaut less .

17voto

Cory Klein Points 5117

Un utilitaire pour les diffs basés sur les octets est distribué avec le Git officiel depuis la version 1.7.8. 1 . Il vous suffit de localiser l'endroit où il est installé sur votre machine et de l'activer.

Trouver l'endroit où Git est installé

  • MacOS avec Git installé via Homebrew : C'est /usr/local/opt/git (versions ultérieures : /opt/homebrew/Cellar/git/VERSION )
  • Fenêtres avec Git pour Windows : Exécuter cd / && pwd -W pour trouver le répertoire d'installation.
  • Linux : Nerd. Si vous ne savez pas encore où Git est installé, alors ll $(which git) ou locate git devrait aider.

Lien diff-highlight dans votre répertoire bin afin que votre PATH puisse le trouver

GIT_HOME='/usr/local/opt/git/'  # Use the value from the first step.
ln -s "${GIT_HOME}/share/git-core/contrib/diff-highlight/diff-highlight" \
      '/usr/local/bin/diff-highlight'

Activez-le dans votre configuration Git

git config --global interactive.diffFilter diff-highlight # Use on interactive prompts
git config --global pager.diff "diff-highlight | less"    # Use on git diff
git config --global pager.log  "diff-highlight | less"    # Use on git log
git config --global pager.show "diff-highlight | less"    # Use on git show

1 Voici le Version v1.7.8 pero Beaucoup de changements ont été réalisées depuis lors.

16voto

dshepherd Points 491

Le comportement que vous souhaitez est maintenant disponible dans git lui-même (comme l'a souligné un commentaire de naught101). Pour l'activer, vous devez définir votre pager à

perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less

donde /usr/share/doc/git/contrib/diff-highlight/diff-highlight est l'emplacement du surligneur script sur Ubuntu 13.10 (je n'ai aucune idée de la raison pour laquelle il se trouve dans un fichier doc ). S'il n'est pas présent sur votre système, essayez d'utiliser locate diff-highlight pour le trouver. Notez que la mise en évidence script n'est pas exécutable (du moins sur ma machine), d'où l'obligation d'utiliser perl .

Pour toujours utiliser le surligneur pour les différentes commandes de type diff, il suffit d'ajouter ce qui suit à votre fichier ~/.gitconfig fichier :

[pager]
    log = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less
    show = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less
    diff = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less

Je l'ai ajouté comme nouvelle réponse parce que le commentaire de naught101 est enterré et parce que l'installation n'est pas aussi triviale qu'elle devrait l'être et, au moins sur la version d'Ubuntu que j'ai, les instructions dans le LISEZ-MOI ne fonctionnent pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X