web-dev-qa-db-fra.com

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 voir les différences entre les branches, par exemple master et devel avec meld?

Au moment où je fais les étapes suivantes:

  1. Renommer le dossier de la copie de travail
    Par exemple mv /projectA /projectA_master)
  2. Cloner à nouveau le projet 
    git clone url
  3. Passer à la branche devel 
    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? Je n’en ai besoin que pour passer en revue les modifications et pas avant tout pour la fusion.

143
Marten Bauer

J'ai également trouvé ce problème ennuyeux et j'ai donc créé git meld, ce qui permet de différencier plus facilement les commits arbitraires de l'arbre de travail ou de la zone de transfert. Vous pouvez le trouver à https://github.com/wmanley/git-meld . C'est un peu le script de Mark, mais cela permet de comparer une validation quelconque, la zone de transfert ou le répertoire de travail avec les autres. Si l’un des éléments que vous comparez est l’arbre de travail, il s’agit également de lecture-écriture afin que vous ne perdiez pas vos modifications.

52
Will Manley

Court et doux:

git config --global diff.tool meld

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

Ensuite, si vous voulez une diff graphique au lieu d'une diffuse textuelle, vous appelez simplement git difftool au lieu de git diff (les deux prennent les mêmes arguments). Dans ton cas:

git difftool master..devel

Mise à jour: Si vous ne souhaitez pas utiliser le diff fichier par fichier, mais souhaitez utiliser la vue "sous-répertoire" de meld avec toutes les modifications entre les deux branches, notez l'option -d ou --dir-diff pour git difftool. Par exemple, lorsque je suis sur la branche XYZ et que je veux voir ce qui est différent entre ceci et la branche ABC, je lance ceci:

git difftool -d ABC
290
Jörg W Mittag

À partir de git v1.7.11, vous pouvez utiliser git difftool --dir-diff pour exécuter un répertoire diff. Ce qui fonctionne assez bien avec meld wihout https://github.com/wmanley/git-meld scripts.

Configurer git

git config --global diff.tool meld

Utilise 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
93
GutenYe

Il est important de dire qu'en utilisant git difftool -d vous pouvez toujours éditer vos fichiers de travail dans Meld et les sauvegarder. Pour ce faire, vous devez comparer une branche à votre arbre de travail actuel, par exemple:

git difftool -d branchname

Meld montrera que les répertoires gauche et droit sont situés dans/tmp. Cependant, les fichiers dans le bon répertoire sont en réalité des liens symboliques vers vos fichiers dans le répertoire de travail actuel (ne s'applique pas à Windows). Ainsi, vous pouvez les éditer directement dans Meld et lorsque vous les enregistrez, vos modifications seront enregistrées dans votre répertoire de travail.

Une option encore plus intéressante est la comparaison du répertoire de travail actuel avec stash. Vous pouvez le faire en tapant simplement:

git difftool -d stash

Vous pouvez ensuite transférer certaines modifications de stash (fenêtre de gauche) vers votre copie de travail actuelle (fenêtre de droite), sans utiliser git stash pop/apply et en évitant une résolution de conflit gênante pouvant être induite par ces commandes.

Je pense que cela peut considérablement augmenter le flux de travail avec les caches. Vous pouvez progressivement transférer les modifications d’une réserve à une copie de travail et les valider une à une, en introduisant d’autres modifications si vous le souhaitez.

10
Piotr Jurkiewicz

Je pense qu’un moyen facile de faire cela consiste à utiliser git reset --soft:

Objectif: comparer les différences entre branch_a et branch_b avec meld

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

Bien que les autres réponses semblent indiquer qu’il n’ya pas moyen de le faire directement dans le dépôt git pour le moment, il est facile (grâce à la réponse à une autre question :)) d’écrire un script qui extraira le les arbres de deux commettent dans des répertoires temporaires et exécutent la fusion sur eux, en supprimant les deux répertoires lors de la fermeture de la fusion:

http://Gist.github.com/498628

Bien sûr, vous perdrez toutes les modifications apportées via meld, mais c'est assez agréable pour un aperçu rapide des différences, je pense.

5
Mark Longair

Dans Git V1.7.9, vous pouvez comparer deux commits sans la ligne de commande:

Vous devez configurer dans les options d'édition 'git gui', global: "Utiliser l'outil de fusion: fusion".

Démarrer gitk , sélectionnez une validation, cliquez avec le bouton droit de la souris sur une autre validation> " diff this -> selected " . Sous "patch", cliquez avec le bouton droit sur un fichier> " external diff ".

meld démarre et affiche le message toujours sélectionné, d'abord validé du côté droit.

1
Stefan Forster

Je ne peux pas commenter sous Piort Jurkiewicz répond au commentaire de pykiss: "copier les nouveaux fichiers d'une branche dans un répertoire de travail ne fonctionne pas :(", mais:

La solution pour copier le fichier file.txt de branch_B dans la branche active branch_A est la suivante:

git chechout branch_B -- file.txt

de cette réponse à cette question . Je ne sais pas comment le faire au sein de se fondre.

0
Geoffroy

Si vous avez un répertoire de travail et un index propres (ou ne vous en souciez pas), voici ce que vous voulez:

git diff master..devel | patch -p1 && meld . && git reset --hard
0
sqrt163