Comment puis-je visualiser par différences de caractères dans un fichier de différences unifiées?
Dis-je obtenir un patch créé avec git format-patch
. Le fichier est en fait un diff unifié avec un certain nombre de métadonnées. Si j'ouvre le fichier dans Vim, je peux voir les lignes qui ont été modifiées, mais je ne vois pas ce qui caractères dans les lignes modifiées diffèrent. Est-ce quelqu'un connais un moyen (dans Vim, ou d'un autre logiciel gratuit qui fonctionne sur Ubuntu) pour visualiser par caractère différences?
Un contre-exemple où par caractère diff est visualisée est lors de l'exécution de vimdiff a b
.
mise à jour Ven 12 Nov à 22:36:23 UTC 2010
diffpatch est utile pour le scénario où vous travaillez avec un seul fichier.
de mise à jour Thu Jun 16 17:56:10 UTC 2016
Découvrez diff-mettre en évidence dans git 2.9. Ce script n' exactement ce que j'ai été à l'origine en cherchant.
- Cela pourrait être mieux sur superuser.com
- Peut-être. J'ai choisi stackoverflow.com depuis la FAQ mentions c'est l'endroit pour poser des questions sur "outils logiciels couramment utilisés par les programmeurs"
- Je ne suis pas sûr que cela répond directement à votre question, mais
git diff --color-words
est très utile pour juste de voir ce que les mots ont changé au sein des lignes, au lieu de l'habituel unifiée de la sortie de la commande diff. Il est la parole plutôt que basée sur le caractère, cependant, de sorte que si il n'y a pas beaucoup d'espaces dans le contenu que vous êtes de comparaison, alors la sortie peut être moins soigné. (Édité: Oups, je vois que j'ai mal compris ce que vous me demandez - mais peut-être que ce commentaire ne soit utile à quelqu'un.)
Vous devez vous connecter pour publier un commentaire.
Donné à vos références de Vim dans la question, je ne sais pas si c'est la réponse que vous voulez 🙂 mais Emacs peuvent le faire. Ouvrez le fichier contenant la diff, assurez-vous que vous êtes dans
diff-mode
(si le fichier est nomméfoo.diff
oufoo.patch
cela se fait automatiquement; sinon, tapez M-xdiff-mode
RET), allez dans le morceau qui vous intéresse et appuyez sur C-c C-b pourrefine-hunk
. Ou une étape dans le fichier, un morceau à la fois, M-n; ce qui fera le raffinage automatiquement.git log master.. -p | emacs -
M-!
pour exécuter la commande et la capture de la sortie dans une mémoire tampon.Dans git, vous pouvez fusionner sans commettre. Fusionner vos patch d'abord, puis de faire:
Notez le point après le signe égal.
git diff --color-words=.
.git diff --color-words .
fonctionne différemment. Mieux, c'estgit diff --color-words .
.git diff --color-words=.
git diff --color-words .
est vraiment la même quegit diff --color-words -- .
! I. e., le.
est interprété comme un chemin. Vous pouvez le vérifier avecmkdir x y; echo foo > x/test; git add x/test; git commit -m test; echo boo > x/test; cd y; git diff --color-words=.; git diff --color-words .; git diff --color-words -- .
.git commit -p
?git log
trop, mais eh ben c'est moche. Il entoure les différences entre crochets, et confond si ceux-ci sont de la partie du code ou pas.Voici quelques versions avec moins de bruit de sortie de
git diff --word-diff-regex=<re>
et qui nécessitent moins de frappe que l', mais sont équivalentes à la,git diff --color-words --word-diff-regex=<re>
.Simple (ne mettre en évidence les modifications d'espace):
Simple (les faits saillants du caractère individuel des changements; ne pas mettre en évidence les modifications d'espace):
Plus complexe (elle met en évidence les modifications d'espace):
En général:
où
<re>
est une regexp la définition de "mots" aux fins de l'identification des changements.Ils sont moins bruyants qu'ils la couleur a changé "les mots", tandis que l'utilisation de seulement
--word-diff-regex=<re>
entoure appariés "mots" avec des couleurs-/+
marqueurs.--color-words
, sans le=.
partie.git diff --color-words='\w'
serait mieux travailler avec les signes diacritiques (git v1.7.10.4)--word-diff=plain
en outre ont[-
et-]
surround suppressions et{+
et+}
surround ajouts. Le manuel met en garde, cependant, de réelles occurrences de ces délimiteurs dans la source sont pas échappé quelque sortegit diff
modifier les couleurs d'arrière-plan au lieu de les couleurs de premier plan, ce qui pourrait aider: github.com/git/git/tree/master/contrib/diff-highlight; je ne l'ai pas essayé moi-même.--color-words
, mais sinon il a l'air sympa. Je vais m'en tenir à la ligne de diff ensuite.-U0
?re
ne pas mettre en évidence les modifications d'espaceCi-dessus regex (de Thomas Rast) fait un travail décent de séparer les diff fragments à la ponctuation/niveau de personnage (tout en n'étant pas aussi bruyant que
--word-diff-regex=.
).J'ai posté une capture d'écran de la sortie ici.
Mise à jour:
Cet article a quelques bonnes suggestions. Plus précisément, le
contrib/
arbre de la repo git a undiff-highlight
script perl qui montre fine des faits saillants.De démarrage rapide pour l'utiliser:
--color-words=[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+'
'
au début de la valeur de là. sinon, j'ai une erreur. Aussi, j'ai simplement à l'aide de--color-words
- je obtenir le même comportement que l'utilisation que regexp.foo.bar
àfoo.qux
, vous verrez la différence.git diff --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+'
.man git diff
de comprendre ce que votre réponse était en train de faire. Aussi, ressemble à mon point de vue est le même que @Eddfied est dans le premier commentaire 😛--color-words=.
. Sur certaines lignes à l'aide de cette expression, la diff-ed caractère (dans mon cas, un#
caractère de commentaire qui a été supprimé dans un fichier YAML) saute au début de la ligne et n'est plus en retrait correctement. À l'aide de--color-words=.
semble montrer l'indentation.diff-hightligh
doit être effectué avecmake
atm. github.com/Homebrew/homebrew-core/issues/.../usr/local/share/git-core/contrib/diff-highlight/diff-highlight
. Ceci semble suggérer que l'Homebrew git du fait installer l'ensemble de la contrib dans/usr/local/share/git-core/contrib/
. Donc finalement, le suivant a fonctionné pour moigit diff --color=always | /usr/local/share/git-core/contrib/diff-highlight/diff-highlight
Si vous n'avez rien contre l'installation de NodeJS, il y a un paquet appelé "diff-so-chic" (https://github.com/so-fancy/diff-so-fancy), ce qui est très facile à installer et fonctionne parfaitement:
Edit: Viens de découvrir que c'est en fait un wrapper pour l'officiel diff-mettre en avant... Au moins c'est plus facile à installer pour perlophobes comme moi et la page GitHub est bien documenté 🙂
Ne suis pas au courant de par le caractère différence de l'outil, mais il y a un mot par la différence de l'outil: wdiff.
consulter des exemples Top 4 Fichier Différence Outils UNIX /Linux – Diff, Colordiff, Wdiff, Vimdiff.
wdiff old_file new_file | cdiff
*vimdiff
, puis à l'intérieur de vim:windo wincmd K
afin de passer à la verticale de la fenêtre de mise en page (l'un en dessous de l'autre) de côté par côté. Cette mise en page est beaucoup mieux pour les fichiers avec de longues lignes.wdiff2
,mdiff
, et la Google est un outil en ligne.Après un peu de recherche, j'ai remarqué cette question est venu deux fois récemment sur les principaux Vim liste de diffusion. Le NrrwRgn plugin a été mentionné les deux fois (faire deux étroites, les régions et les diff entre eux). À l'aide de NrrwRgn comme décrit par Christian Brabandt se sent plus comme une solution de contournement qu'une solution, mais peut-être que c'est assez bon.
J'ai essayé NrrwRgn et il, avec :diffthis, était en effet très utile pour les illustrant par-différences de caractère au sein d'un seul fichier. Mais il a fallu de nombreuses frappes de touches. Mon Vimscript est assez rouillé, mais il pourrait probablement être scripté. Peut-être NrrwRgn pourrait être améliorée pour fournir la fonctionnalité désirée.
Pensées?