175 votes

Voir les différences de branches avec meld ?

Je sais que je peux voir la différence entre HEAD et l'état actuel avec meld . . Mais comment puis-je visualiser les différences entre les branches, par exemple master y devel avec meld ?

Pour l'instant, je procède de la manière suivante :

  1. Renommer le dossier de la copie de travail
    Par exemple mv /projectA /projectA_master )
  2. Clonez à nouveau le projet
    git clone url
  3. Passer à devel branche
    cd projectA && git -b devel origin/devel
  4. Voir les différences avec meld
    meld /projectA_Master projectA

N'y a-t-il pas un moyen plus facile d'obtenir le même résultat dans meld ? Je n'en ai besoin que pour examiner les modifications et pas principalement pour la fusion.

0 votes

354voto

Jörg W Mittag Points 153275

Court et doux :

git config --global diff.tool meld

Ceci configure Git pour utiliser meld comme outil de différenciation. (Vous n'avez pas besoin de spécifier les arguments de la ligne de commande, le support de la fonction meld est intégré à Git).

Ensuite, si vous voulez une différence graphique au lieu d'une différence textuelle, vous invoquez simplement git difftool au lieu de git diff (ils reprennent tous deux les mêmes arguments). Dans votre cas :

git difftool master..devel

Mise à jour : Si vous ne voulez pas la comparaison fichier par fichier, mais plutôt utiliser la vue "sous-répertoire" de meld avec tous les changements entre les deux branches, notez l'option -d ou --dir-diff option pour git difftool . Par exemple, lorsque je suis sur la branche XYZ et que je veux voir ce qui est différent entre celle-ci et la branche ABC, j'exécute ceci :

git difftool -d ABC

3 votes

Ce n'est pas ce que je cherche. Il me montre les différences fichier par fichier. J'ai archivé cela avec un script diff.py et 'git diff master..devel' avant. Je veux voir toutes les différences et l'arborescence des répertoires comme le fait 'meld folderA/ folderB/'.

0 votes

Marten, c'est la façon dont Git fonctionne. Il ne suit que les fichiers, donc vous ne pouvez voir la différence que fichier par fichier. Dans git, vous ne pouvez pas commiter un répertoire vide seul. Y a-t-il une raison particulière pour laquelle vous voulez afficher la différence entre les répertoires ?

0 votes

@DonnyKurnia : Il m'a fallu un peu de temps pour comprendre ce que l'OP essaie de faire : Meld a une interface utilisateur séparée pour visualiser tous les changements dans un répertoire. Vous pouvez filtrer l'affichage des fichiers en fonction de s'ils sont identiques, modifiés, nouveaux. OP veut utiliser cette interface pour afficher les changements. (Cela vous permet de voir une liste de tous les changements et de choisir ceux que vous voulez différencier.) Donc, ce n'est pas une comparaison entre les répertoires, mais une comparaison entre les commits mais vu comme un tout.

108voto

Guten Points 871

À partir de git v1.7.11, vous pouvez utiliser git difftool --dir-diff pour effectuer une comparaison de répertoires. Ce qui fonctionne assez bien avec meld sans https://github.com/wmanley/git-meld scripts.

Configurer git

git config --global diff.tool meld

Utilisez-le

git difftool -d topic             // -d is --dir-diff
git difftool -d master..topic

Pour macOS

brew cask install meld
git config --global difftool.meld.cmd 'open -W -a Meld --args \"$LOCAL\" \"$PWD/$REMOTE\"'
git config --global difftool.meld.trustExitCode true

2 votes

Je pense que c'est vraiment ce que le PO voulait. Notez l'option -g pour utiliser l'outil guidiff et l'option -d pour utiliser un --dir-diff. C'est bien pour faire des revues de code. Remarque : l'option difftool.prompt n'est pas nécessaire lorsque l'on spécifie -d, du moins pour Git 1.8.

1 votes

C'est génial. Exactement ce dont j'avais besoin. Je vous remercie !

5 votes

Cela peut-il être fait de manière à ce que la branche actuelle ne soit pas dans un dossier tmp et permette donc des modifications ?

60voto

Will Manley Points 423

J'ai également trouvé ce problème ennuyeux, c'est pourquoi j'ai créé git meld qui permet une manière plus confortable de comparer des commits arbitraires avec l'arbre de travail ou la zone de transit. Vous pouvez le trouver à https://github.com/wmanley/git-meld . C'est un peu comme le script de Mark mais fonctionne pour comparer n'importe quel commit arbitraire ou la zone de transit ou le répertoire de travail contre n'importe lequel des autres. Si l'une des choses auxquelles vous comparez est l'arbre de travail, alors celui-ci est également en lecture-écriture afin que vous ne perdiez pas vos modifications.

1 votes

Excellent outil, Will. Merci ! Tout à fait recommandé ... maintenant si seulement il fonctionnait aussi sur les fusions.

0 votes

TYVM pour un outil formidable - (je me rappelle d'ajouter ! à l'alias)

29 votes

Citation de Will, à partir de son dépôt github : "NOTE : git-meld est obsolète depuis que git difftool a appris l'option --dir-diff dans git 1.7.11."

5voto

Mark Longair Points 93104

Bien qu'il semble, d'après les autres réponses, qu'il n'y ait pas de moyen de le faire directement dans le dépôt git pour le moment, c'est facile (grâce à la réponse à une autre question :)) pour écrire un script qui va extraire les arbres de deux commits dans des répertoires temporaires et exécuter meld sur eux, en supprimant les deux répertoires lorsque meld sort :

http://gist.github.com/498628

Bien sûr, vous perdrez tous les changements effectués via meld, mais il est tout à fait agréable pour un aperçu rapide des différences, je pense.

5voto

realtime Points 142

Je pense qu'un moyen simple de le faire est d'utiliser git reset --soft :

Objectif : comparer les différences entre la branche_a et la branche_b avec meld

git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .

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