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

12voto

xpixelz Points 181

J'utilise --color-words et cela fonctionne bien pour moi :

$ git diff --color-words | less -RS

7voto

Eugen Konkov Points 5218

Comme @dshepherd dit :

Le comportement que vous souhaitez est maintenant disponible dans git lui-même

Mais diff-highlight est situé dans le DOC et n'est pas disponible dans le shell.
Pour installer diff-highlight dans votre ~/bin suivre les étapes suivantes (cela vous évitera d'avoir à taper sur le clavier) :

$ locate diff-highlight
$ cd /usr/share/doc/git/contrib/diff-highlight  #or path you locate
$ sudo make
$ mv diff-highlight ~/bin

Configurez ensuite votre .gitconfig comme l'indique le document officiel :

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

UPD
Vous pouvez également essayer la version suivante sur la dernière version git sans aucune installation :

git diff --color-words=.

Plus complexe :

git diff --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+'

4voto

MForster Points 2206

En un réponse à une question similaire, mais légèrement différente Je suggère d'utiliser Delta Il s'agit d'un outil moderne de post-traitement des diffs qui prend spécifiquement en charge le souhait de mettre en évidence les mots et les lignes en même temps.

Delta est très configurable (avec modes d'émulation pour diff-highlight y diff-so-fancy ) et comprend de nombreux caractéristiques que l'on ne trouve pas dans d'autres outils : côte à côte vues, mise en évidence de la syntaxe et la coloration de fusionner les conflits y git blame sortie .

La documentation Delta comporte également un aperçu des projets connexes qui mentionne quelques autres outils ad hoc permettant de mettre en évidence à la fois des mots et des lignes.

Delta diff formatting example

2voto

corgi Points 197

Emacs dispose de la fonction ediff-patch-buffer qui devrait répondre à vos besoins.

Ouvrez le fichier non corrigé dans emacs en tapant ESC-x, ediff-patch-buffer.

Suivez les instructions et vous devriez voir une comparaison en surbrillance des versions patchée et originale de votre fichier.

Selon votre commentaire, la solution suivante vous donnera une solution bash ne nécessitant que dwdiff :

#!/bin/bash
paste -d'\n' <(dwdiff -2 -L -c <(cat $2) <(patch $2 -i $1 -o -)) <(dwdiff -1 -L -c <(cat $2) <(patch $2 -i $1 -o -))| uniq

1voto

Ciro Santilli Points 3341

Difficile

GitLab utilise Diffy https://github.com/samg/diffy (Ruby) pour obtenir un résultat similaire à GitHub et diff-highlight :

enter image description here

Diffy fait la différence lui-même en utilisant le même algorithme que Git, et supporte différents types de sorties, y compris la sortie HTML utilisée par GitLab :

gem install diffy
echo '
  require "diffy"    
  puts Diffy::Diff.new("a b c\n", "a B c\n").to_s(:html)
' | ruby

Salida:

<div class="diff">
  <ul>
    <li class="del">a <strong>b</strong> c</li>
    <li class="ins">a <strong>B</strong> c</li>
  </ul>
</div>

Notez comment strong a été ajouté aux octets modifiés.

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