Comment résoudre interactivement (visuellement) les conflits dans SourceTree / git

119

J'utilise (Windows) SourceTree pour mon projet git. Je peux le faire dans l'invite de commande ou dans le terminal Linux.

Mais je me demande s'il existe une bonne façon de résoudre les conflits de manière interactive et visuelle. Par exemple, si pull détecte des conflits, affiche un outil de conflit basé sur l'interface graphique (par exemple, P4Merge). C'est possible?

Je fais toujours de la résolution manuelle des conflits, ce qui est juste douloureux.

Ceci est, par exemple, un pullmessage git , de SourceTree.

git -c diff.mnemonicprefix=false -c core.quotepath=false pull --no-commit origin master
From W:\repo\
 * branch            master     -> FETCH_HEAD   

Updating 33c07bf..41e0249

error: Your local changes to the following files would be overwritten by merge:
    foo.cpp
    goo.cpp
    goo.hpp
Please, commit your changes or stash them before you can merge.
Aborting    

Completed with errors, see above.
Nullptr
la source

Réponses:

135

Depuis SourceTree, cliquez sur Outils-> Options. Ensuite, dans l'onglet "Général", assurez-vous de cocher la case pour permettre à SourceTree de modifier vos fichiers de configuration Git.

Puis passez à l'onglet "Diff". Dans la moitié inférieure, utilisez la liste déroulante pour sélectionner le programme externe que vous souhaitez utiliser pour effectuer les différences et la fusion. J'ai installé KDiff3 et je l' aime assez bien. Lorsque vous avez terminé, cliquez sur OK.

Maintenant, quand il y a une fusion, vous pouvez aller sous Actions-> Résoudre les conflits-> Lancer l'outil de fusion externe.

gtrig
la source
4
J'ai essayé cela, mais à la fin, je ne vois pas incomparable être lancé. Je vois des fichiers de comparaison en cours de génération, mais c'est tout. Je ne peux pas résoudre le conflit. Changer cela en comparaison standard / par défaut ne semble pas non plus aider.
Echiban
1
@echiban Vous avez probablement la licence standard pour Beyond Compare qui n'accepte pas la fusion à 3 voies. Vous devez devenir pro pour l'utiliser comme outil de fusion git
pierdevara
6
Après avoir suivi toutes les étapes pour configurer "Launch External Merge Tool" est toujours grisé pour moi, aucun moyen de l'activer
pal4life
2
De plus, je ne sélectionnais pas le fichier de conflit de fusion, une fois que je l'ai fait, tout s'est bien passé
pal4life
2
J'ai dû cliquer sur l'élément "Modifications non validées" dans la liste de validation avant qu'il ne soit grisé.
Micah Zoltu
11

J'utilise SourceTree avec TortoiseMerge / Diff, qui est un outil de diff / fusion très simple et pratique.

Si vous souhaitez également l'utiliser, alors:

  1. Obtenez la version autonome de TortoiseMerge / Diff (assez ancienne, car elle n'est pas livrée autonome depuis la version 1.6.7 de TortosieSVN, c'est-à-dire depuis juillet 2011). Liens et détails dans cette réponse .

  2. Décompressez TortoiseIDiff.exeet TortoiseMerge.exedans n'importe quel dossier ( c:\Program Files (x86)\Atlassian\SourceTree\extras\dans mon cas).

  3. Dans SourceTree, ouvrez Tools > Options > Diff > External Diff / Merge. Sélectionnez TortoiseMergedans les deux listes déroulantes.

  4. Appuyez sur OKet pointez SourceTree vers votre emplacement de TortoiseIDiff.exeet TortoiseMerge.exe.

Après cela, vous pouvez sélectionner Resolve Conflicts > Launch External Merge Tooldans le menu contextuel chaque fichier en conflit dans votre référentiel local. Cela ouvrira TortoiseMerge, où vous pourrez facilement gérer tous les conflits que vous avez. Une fois terminé, fermez simplement TortoiseMerge (vous n'avez même pas besoin d'enregistrer les modifications, cela se fera probablement automatiquement) et après quelques secondes, SourceTree devrait gérer cela avec élégance.

Le seul problème est qu'il crée automatiquement une copie de sauvegarde, même si l'option appropriée n'est pas cochée .

trejder
la source
4

Lorsque le menu Résoudre les conflits -> Contenu est désactivé, il se peut qu'il y en ait un dans la liste des fichiers en attente. Nous devons sélectionner l'option Fichiers en conflit dans la liste déroulante (en haut)

J'espère que ça aide

Ozkary
la source