Quand je tape "git diff", j'aimerais voir un diff côte à côte, comme avec "diff -y", ou j'aime afficher le diff dans un outil de diff interactif comme "kdiff3". Comment cela peut-il être fait?
163
Quand je tape "git diff", j'aimerais voir un diff côte à côte, comme avec "diff -y", ou j'aime afficher le diff dans un outil de diff interactif comme "kdiff3". Comment cela peut-il être fait?
Réponses:
Bien que Git ait une implémentation interne de diff, vous pouvez configurer un outil externe à la place.
Il existe deux manières différentes de spécifier un outil de comparaison externe:
GIT_EXTERNAL_DIFF
et lesGIT_DIFF_OPTS
variables d' environnement.git config
Voir également:
git diff --help
Lors de l'
git diff
exécution de a, Git vérifie à la fois les paramètres des variables d'environnement ci-dessus et son.gitconfig
fichier.Par défaut, Git transmet les sept arguments suivants au programme diff:
Vous n'avez généralement besoin que des paramètres ancien et nouveau fichier. Bien sûr, la plupart des outils de diff ne prennent que deux noms de fichiers comme argument. Cela signifie que vous devez écrire un petit script wrapper, qui prend les arguments fournis par Git au script et les transmet au programme git externe de votre choix.
Disons que vous mettez votre wrapper-script sous
~/scripts/my_diff.sh
:vous devez ensuite rendre ce script exécutable:
vous devez ensuite indiquer à Git comment et où trouver votre script de wrapper de diff personnalisé. Vous avez trois choix pour faire cela: (je préfère éditer le fichier .gitconfig)
Utilisation
GIT_EXTERNAL_DIFF
,GIT_DIFF_OPTS
Par exemple, dans votre fichier .bashrc ou .bash_profile, vous pouvez définir:
En utilisant
git config
utilisez "git config" pour définir où votre script wrapper peut être trouvé:
Modifier votre
~/.gitconfig
fichiervous pouvez éditer votre
~/.gitconfig
fichier pour ajouter ces lignes:Remarque:
De la même manière que pour installer votre outil de comparaison personnalisé, vous pouvez également installer un outil de fusion personnalisé, qui pourrait être un outil de fusion visuel pour mieux vous aider à visualiser la fusion. (voir la page progit.org)
Voir: http://fredpalma.com/518/visual-diff-and-merge-tool/ et https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
la source
meld
?meld
version peut-elle être configurée pour faire une différence de répertoire, où je peux choisir pour quel (s) fichier (s) je veux voir la différence? Actuellement, il exécute unemeld
commande distincte pour chaque fichier et je dois quittermeld
pour voir le fichier suivant. Je préféreraismeld
me montrer une liste de répertoires des fichiers modifiés comme il se comporte lorsqu'ilmeld
est utilisé à partir de Mercurial.Essayez git difftool
Utilisez à la
git difftool
place degit diff
. Vous ne reviendrez jamais.MISE À JOUR pour ajouter un exemple d'utilisation:
Voici un lien vers un autre stackoverflow qui parle de
git difftool
: Comment afficher la sortie de 'git diff' avec mon outil / visionneuse de diff préféré?Pour les versions plus récentes de
git
, ladifftool
commande prend en charge de nombreux outils de comparaison externes prêts à l'emploi. Par exemple, ilvimdiff
est automatiquement pris en charge et peut être ouvert à partir de la ligne de commande par:D'autres outils de diff externes pris en charge sont répertoriés via
git difftool --tool-help
voici un exemple de sortie:la source
This message is displayed because 'diff.tool' is not configured.
. Peut-être mettre à jour la réponse avec un minimum de procédure pour configurer cette chose, afin qu'elle affiche les différences côte à côte dans le terminal, ce que OP a demandé? Les outils GUI sont tout à fait inutiles sur le serveur distant où vous vous connectez en utilisant ssh.git difftool
avecvimdiff
n'aligne pas toujours correctement les deux fichiers / tampons.git difftool -y
pour empêcher l'invitegit difftool
sous Windows et Linux: stackoverflow.com/a/48979939/4561887Vous pouvez également essayer
git diff --word-diff
. Ce n'est pas exactement côte à côte, mais mieux, donc vous pourriez le préférer à votre besoin réel côte à côte.la source
git diff --word-diff=color
--word-diff=color
me donne une erreur d'option non valide. Dans quelle version a-t-il été introduit?git diff --color-words
fonctionne.git diff --color-words
c'est la voie à suivre pour les versions git modernes.ydiff
Anciennement appelé
cdiff
, cet outil peut afficher des différences côte à côte , incrémentielles et colorées .Au lieu de faire
git diff
, faites:Cela se lancera
ydiff
en mode d'affichage côte à côte pour chacun des fichiers avec des différences.Installer avec:
-ou-
Pour
git log
, vous pouvez utiliser:-w0
détecte automatiquement la largeur de votre terminal. Consultez laydiff
page du référentiel GitHub pour plus de détails et une démonstration.Testé dans Git 2.18.0, ydiff 1.1.
la source
git diff | cdiff -s
with icdiff?ydiff -s
partir d'un espace de travail git / svn / hg, vous n'avez pas àcd <git repo>
puis exécutezydiff -ls <path/to/file>
Vous pouvez faire un côte à côte en
diff
utilisantsdiff
comme suit:où
HEAD^
est un exemple que vous devez remplacer par tout ce que vous voulez comparer.J'ai trouvé cette solution ici où il y a également quelques autres suggestions. Cependant, cette réponse est la question du PO de manière succincte et claire.
Voir le man git-difftool pour une explication des arguments.
En prenant les commentaires à bord, vous pouvez créer une
git sdiff
commande pratique en écrivant le script exécutable suivant:Enregistrez-le sous
/usr/bin/git-sdiff
etchmod -x
il. Ensuite, vous pourrez faire ceci:la source
tput cols
place, par exemple:git difftool -x "sdiff -s -w $(tput cols)"
.puis simplement:
la source
Si vous souhaitez voir des différences côte à côte dans un navigateur sans impliquer GitHub, vous pouvez profiter de git webdiff , un remplacement instantané pour
git diff
:Cela offre un certain nombre d'avantages par rapport aux outils de difftools GUI traditionnels,
tkdiff
en ce sens qu'il peut vous donner une coloration syntaxique et afficher des différences d'image.En savoir plus ici .
la source
J'utilise colordiff .
Sous Mac OS X, installez-le avec
Sur Linux, c'est peut-être
apt get install colordiff
ou quelque chose comme ça, en fonction de votre distribution.Ensuite:
Ou créez un alias
Ensuite, vous pouvez l'utiliser
Je l'ai appelé "diffy" parce que
diff -y
c'est le différentiel côte à côte sous Unix. Colordiff ajoute également des couleurs plus jolies. Dans l'option-ydw
, ley
est pour le côte à côte, lew
est d'ignorer les espaces blancs et led
est de produire le diff minimal (généralement vous obtenez un meilleur résultat en diff)la source
-y
pour ignorer l'Launch 'colordiff' [Y/n]:
invite.git alias diffy "difftool --extcmd=\"colordiff -ydw\""
? Cela ne devrait-il pas être le casgit config --global alias.diffy "difftool --extcmd=\"colordiff -ydw\""
?Pour unix, en combinant juste
git
et intégrédiff
:Bien sûr, vous pouvez remplacer HEAD par toute autre référence git, et vous voudrez probablement ajouter quelque chose comme
-W 170
la commande diff.Cela suppose que vous comparez simplement le contenu de votre répertoire avec une validation antérieure. La comparaison entre deux commits est plus complexe. Si votre shell est,
bash
vous pouvez utiliser la "substitution de processus":où
REF1
etREF2
sont des références git - balises, branches ou hachages.la source
Personnellement, j'aime vraiment icdiff !
Si vous êtes d'
Mac OS X
accordHomeBrew
, faites-lebrew install icdiff
.Pour obtenir correctement les étiquettes de fichiers, ainsi que d'autres fonctionnalités intéressantes, j'ai dans mon
~/.gitconfig
:Et je l'utilise comme:
git difftool
la source
Cette question est apparue lorsque je cherchais un moyen rapide d'utiliser la manière intégrée git pour localiser les différences. Mes critères de solution:
J'ai trouvé cette réponse pour obtenir de la couleur dans git.
Pour obtenir côte à côte diff au lieu de ligne diff, j'ai modifié l'excellente réponse de mb14 à cette question avec les paramètres suivants:
Si vous n'aimez pas le supplément [- ou {+, l'option
--word-diff=color
peut être utilisée.Cela a aidé à obtenir une comparaison correcte avec le texte json et xml et le code java.
En résumé, les
--word-diff-regex
options ont une visibilité utile avec les paramètres de couleur pour obtenir une expérience de code source colorisée côte à côte par rapport au diff de ligne standard, lors de la navigation dans de gros fichiers avec de petits changements de ligne.la source
Plusieurs autres ont déjà mentionné le cdiff pour git côte à côte, mais personne n'en a donné une implémentation complète.
CDiff d'installation:
Editez ~ / .gitconfig en insérant ces lignes:
Le pager off est nécessaire pour que cdiff fonctionne avec Diff, c'est essentiellement un pager de toute façon donc c'est très bien. Difftool fonctionnera indépendamment de ces paramètres.
L'alias show est nécessaire car git show ne prend en charge que les outils de comparaison externes via l'argument.
Le '#' à la fin de la commande diff external est important. La commande diff de Git ajoute un $ @ (toutes les variables diff disponibles) à la commande diff, mais nous ne voulons que les deux noms de fichiers. Nous appelons donc ces deux explicitement avec $ 2 et $ 5, puis cachons le $ @ derrière un commentaire qui, autrement, confondrait sdiff. Il en résulte une erreur qui ressemble à:
Commandes Git qui produisent maintenant des différences côte à côte:
Utilisation Cdiff:
Vous avez maintenant des différences côte à côte via git diff et difftool. Et vous avez le code source cdiff python pour la personnalisation de l'utilisateur avancé si vous en avez besoin.
la source
Voici une approche. Si vous passez moins, la largeur xterm est définie sur 80, ce qui n'est pas si chaud. Mais si vous exécutez la commande avec, par exemple COLS = 210, vous pouvez utiliser votre xterm étendu.
la source
Ouvrez Intellij IDEA , sélectionnez un ou plusieurs commits dans la fenêtre de l'outil "Contrôle de version", parcourez les fichiers modifiés et double-cliquez dessus pour inspecter les modifications côte à côte pour chaque fichier.
Avec le lanceur de ligne de commande fourni, vous pouvez amener IDEA n'importe où avec un simple
idea some/path
la source
Il y a beaucoup de bonnes réponses sur ce fil. Ma solution à ce problème était d'écrire un script.
Nommez ce 'git-scriptname' (et rendez-le exécutable et placez-le dans votre PATH, comme n'importe quel script), et vous pouvez l'invoquer comme une commande git normale en exécutant
La fonctionnalité réelle n'est que la dernière ligne. Voici la source:
la source
Cela peut être une solution quelque peu limitée, mais fait le travail en utilisant la
diff
commande du système sans outils externes:--suppress-common-lines
(si votrediff
supporte l'option).diff
marqueurs habituels--width=term-width
; dans Bash peut obtenir la largeur comme$COLUMNS
output cols
.Cela peut également être enveloppé dans un script d'aide git pour plus de commodité, par exemple, une utilisation comme celle-ci:
la source