Le projet Open Source Trac a un excellent surligneur de diff - il met en évidence les lignes modifiées et les octets modifiés dans chaque ligne modifiée! Voir ici ou ici pour des exemples.
Existe-t-il un moyen d'utiliser la même couleur de surbrillance (c'est-à-dire les lignes modifiées et les octets modifiés aussi ) dans le terminal bash git
, ou vim
pour la sortie diff (fichier patch)?
Réponses:
Le
diff-highlight
script de contribution Perl produit une sortie si similaire à celle des captures d'écran Trac qu'il est probable que Trac l'utilise:Installer avec:
Déplacez le fichier
diff-highlight
dans le~/bin/
répertoire (ou où que vous soyez$PATH
), puis ajoutez ce qui suit à votre~/.gitconfig
:Installation simple copier-coller suggérée par @cirosantilli:
la source
git add -p
. Veuillez également ajouter:git config --global interactive.diffFilter diff-highlight
Lors de l'utilisation de
git diff
ougit log
et éventuellement d'autres, utilisez l'option--word-diff=color
(il existe également d'autres modes pour les différences de mots BTW)la source
--word-diff=color
c'est vraiment mieux (surtout avecgit config color.diff.old "red reverse"
etgit config color.diff.new "green reverse"
), mais ce n'est pas ce que je veux :(git add --patch
: stackoverflow.com/questions/10873882/…diff-highlight
est qu'il fonctionne bien pour les différences de mots et de lignes.diff-so-fancy
est undiff
surligneur conçu pour les globes oculaires humains.Il supprime les
+
/-
qui sont gênants pour le copier / coller et rend les sections claires entre les fichiers.Couleur
git
(gauche) vsdiff-so-fancy
(droite - notez les surbrillances au niveau des caractères):Si vous voulez la
diff-so-fancy
sortie (côté droit) mais pas contrainte aux fichiers dans ungit
référentiel, ajoutez la fonction suivante à votre.bashrc
pour l'utiliser sur n'importe quel fichier:Par exemple:
Mise en évidence au niveau des caractères et
diff
format standardSi vous n'aimez pas le formatage non standard de
diff-so-fancy
, mais que vous voulez quand même lagit
mise en évidence au niveau des caractères , utilisezdiff-highlight
qui prendragit
la sortie de et produira ladiff
sortie au format standard vraiment jolie :Pour l'utiliser par défaut depuis
git
, ajoutez à votre.gitconfig
:La
[pager]
section indiquegit
de diriger sa sortie déjà colorée vers lesdiff-highlight
couleurs au niveau du caractère, puis page la sortie en moins (si nécessaire), plutôt que d'utiliser simplement la valeur par défautless
.la source
gitconfig
options?dsf()
.Le comportement souhaité est désormais disponible dans git lui-même (comme cela a été souligné dans un commentaire de naught101). Pour l'activer, vous devez régler votre téléavertisseur sur
où
/usr/share/doc/git/contrib/diff-highlight/diff-highlight
est l'emplacement du script de surligneur sur Ubuntu 13.10 (je n'ai aucune idée de pourquoi il est dans undoc
dossier). S'il n'est pas présent sur votre système, essayez d'utiliserlocate diff-highlight
pour le trouver. Notez que le script de mise en évidence n'est pas exécutable (du moins sur ma machine), d'où l'exigence deperl
.Pour toujours utiliser le surligneur pour les différentes commandes de type diff, ajoutez simplement ce qui suit à votre
~/.gitconfig
fichier:J'ai ajouté cela comme une nouvelle réponse, le commentaire de naught101 est enterré et parce que la configuration 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 README ne fonctionnent pas.
la source
git add -p
(mode interactif). Je ne sais pas comment cela peut être corrigé, le simple fait d'ajouter un ajout à la liste le bloque.git config interactive.diffFilter diff-highlight
diff-highlight
n'était pas sur mon chemin, j'ai donc dû d'abord le localiser. Détails dans ma réponse ci-dessous.Un utilitaire pour les différences basées sur les octets a été distribué avec Git officiel depuis la v1.7.8 1 . Il vous suffit de localiser où il est installé sur votre machine et de l'activer.
Trouvez où Git est installé
/usr/local/opt/git
cd / && pwd -W
pour trouver le répertoire d'installation.ll $(which git)
oulocate git
devrait vous aider.Lien
diff-highlight
vers votre répertoire bin afin que votre PATH puisse le trouverActivez-le dans votre configuration Git
1 Voici la version v1.7.8 , mais de nombreux changements ont été apportés depuis.
la source
which git
exige qu'il soit dans le PATH en premier lieu, donc cela ne fonctionnera pas si ce n'est pas :-)diff-highlight
, il ne l' installe pas réellement , donc l'étape de lien symbolique est en effet nécessaire (au moins sur macOS). Si vous trouvez que cela n'est pas nécessaire pour votre plate-forme, n'hésitez pas à mettre à jour la réponse. Pendant ce temps,which git
ne fonctionne généralement, parce que Git fait installergit
quelque part sur le chemin binaire..perl
. La compilation est triviale: il suffit de l'exécutersudo make
dans lediff-highlight
répertoire.J'utilise l'
--color-words
option et cela fonctionne bien pour moi:la source
comme le dit @dshepherd :
Mais
diff-highlight
se trouve dans DOC et n'est pas disponible à partir du shell.Pour installer
diff-highlight
dans votre~/bin
répertoire, suivez les étapes suivantes (cela enregistrera votre saisie):Ensuite, configurez votre
.gitconfig
document officiel comme le dit:UPD
Vous pouvez également essayer la dernière version
git
sans aucune installation:Plus complexe:
la source
Emacs a la fonction ediff-patch-buffer qui devrait répondre à vos besoins.
Ouvrez le fichier non patché dans emacs type ESC-x, ediff-patch-buffer.
Suivez les invites et vous devriez voir une comparaison en surbrillance des versions corrigées et originales de votre fichier.
Selon votre commentaire, ce qui suit vous donnera une solution bash ne nécessitant que dwdiff:
la source
colordiff -u <(patch original_file -i patch_file -o -) <(cat original_file)
mais cela ne fera que mettre en évidence les lignes modifiées et non les morsures ...dwdiff -c --diff-input diff_file
Diffy
GitLab utilise Diffy https://github.com/samg/diffy (Ruby) pour obtenir une sortie similaire à GitHub et diff-highlight:
Diffy fait le diff lui-même en utilisant le même algorithme ad Git, et prend en charge différents types de sorties, y compris la sortie HTML utilisée par GitLab:
Production:
Notez comment a
strong
été ajouté aux octets modifiés.la source
Oui, Vim fait cela, y compris la mise en évidence du texte modifié dans une ligne.
Voir
:h diff
et:h 08.7
pour plus de détails sur la façon de différencier les fichiers.Vim utilise un algorithme assez simple pour sa mise en évidence. Il recherche sur la ligne le premier caractère modifié, puis le dernier caractère modifié, et met simplement en surbrillance tous les caractères entre eux.
Cela signifie que vous ne pouvez pas avoir plusieurs points forts par ligne - de nombreuses décisions de conception dans Vim donnent la priorité à l'efficacité.
la source
vimdiff file1 file2
affichera la différence par caractère entre deux fichiers.vimdiff est un outil de diff inclus dans vim. (Vim aurait dû être compilé avec l'option + diff, pour être sûr que vous pouvez vérifier avec
:version
)Vous pouvez également le lancer depuis l'intérieur de vim. Voir
:help diff
pour plus d'informations et de commandes.la source
vimdiff file.old file.new -c 'FormatCommand diffformat' -c 'w! file.diff.html' -c 'qa!'
.screen -D -m
ou ajouter&>/dev/null
(la variante / dev / null produit parfois des bogues étranges) si vous ne voulez pas voir le terminal clignoter) et quitter vim une fois le formatage terminé, mais c'est du pur vimscript et même avec mes optimisations, il est très lent pour les gros fichiers.Remarque : ceci est une copie de ce qui se trouve ici: Comment améliorer la mise en évidence des différences de git? . Publier ma réponse ici aussi, car cela peut être utile à certaines personnes qui trouvent directement ce fil :)
Comme indiqué dans certaines réponses précédentes, cela n'est possible qu'avec des trucs git. Je poste ceci car les instructions peuvent être un peu plus faciles à suivre en fonction de votre système, mais cela est similaire à plusieurs autres réponses.
Une solution qui repose uniquement sur git et ses contributions. Cela ne nécessite aucun fichier supplémentaire que celui fourni avec git . Toutes les explications sont pour Ubuntu (testé sur 18.04LTS), devraient fonctionner de la même manière sur les autres systèmes Linux:
sur mon système, la seule réponse valable est:
~/.gitconfig
à jour votre pour obtenir le résultat souhaité, en ajoutant (notez qu'il s'agit de TABS et non de 4 espaces):la source