web-dev-qa-db-fra.com

Fusionner la résolution des conflits

En cas de conflit de fusion dans Git, des fichiers indésirables tels que les suivants sont insérés dans les fichiers en conflit. Trois questions:

  1. Comment lisez-vous ces annotations?
  2. Quelles stratégies utiliser pour résoudre ces conflits de fusion?
  3. Existe-t-il un outil GUI pour Mac qui sait lire ces fichiers et afficher les deux versions côte à côte pour faciliter la résolution du problème?

enter image description here

Remarque: Au cas où cela serait pertinent, j'utilise le client GUI Mac de GitHub.

56
Chris Calo

Il y a maintenant une meilleure solution que d'essayer de lire les marqueurs de charabia que Git insère dans vos fichiers. Kaleidoscope 2 , la deuxième version de Black Pixel de leur outil de diff, est maintenant également un outil de fusion. Ce n'est pas gratuit, mais cela fonctionne à merveille.

Après avoir installé Kaleidoscope 2, il est très simple de l'intégrer à Git. Ouvrez Kaléidoscope et dans la barre de menu choisissez Kaléidoscope > Intégration…

Kaleidoscope's Integration menu option.

Ensuite, vous verrez cette fenêtre. Choisissez simplement Git dans la navigation de gauche, puis installez l'outil de ligne de commande ksdiff, puis créez l'outil de diff et de fusion par défaut de Kaleidoscope Git.

Kaleidoscope's Git Integration dialog.

Enfin, une fois que vous avez un conflit de fusion dans Git, accédez simplement à la ligne de commande et exécutez git mergetool. Maintenant, le conflit est facile à lire. Prendre plaisir.

Kaleidoscope sane view for merge conflicts.

21
Chris Calo

Tout entre <<<<<< et ====== provient de la révision HEAD, qui est l'état validé avant de démarrer l'opération de fusion (git merge se plaindra si l'arborescence est sale, elle devrait donc être équivalente à votre répertoire de travail).

Les parties entre ====== et >>>>>> provient de la version fusionnée. Le texte après le >>>>>> est le commentaire du commit qui a introduit le changement conflictuel.

La présence d'un marqueur de conflit signifie que la version de base de cette partie du fichier est différente des deux "nouvelles" versions. La version de base (dernier ancêtre commun) n'est pas affichée.

Si vous voulez une fusion plus confortable et une interface graphique disponible, je vous suggère de jeter un œil à kdiff3.

35
Simon Richter
<<<< HEAD #Where the conflict starts

#Previous Revision

========== # The point where things look iffy

#Things that changed

>>>>> New Commit # Point where the conflict ends

Le Xcode de Mac est fourni avec FileMerge qui est accessible sur la ligne de commande avec opendiff.

git mergetool -t opendiff

16
sparrow

Vous pouvez configurer un outil de fusion (graphique) et utiliser cet outil pour résoudre les conflits.

Jetez également un œil à la git mergetool commande - si l'un des outils prédéfinis est installé ou si vous avez configuré un autre outil, il ouvrira l'outil pour la résolution http://schacon.github.com/git/git-mergetool. html

Si vous êtes intéressé par les outils GUI, vous n'avez pas à vous soucier de la signification réelle des notations, car l'outil GUI vous aidera à prendre facilement les résolutions. Comprenez simplement que les pièces marquées par ===== et >>>>> sont les sections de conflit.

4
manojlds

Lorsque vous avez deux branches avec des modifications dans le même fichier et que vous essayez de les fusionner, un conflit de fusion se produit. Pour afficher la liste des fichiers en conflit, exécutez git status sur votre terminal.

Les lignes en conflit des fichiers seront marquées par des indicateurs visuels: <<<<< - Le conflit commence après cette ligne. ===== - Divise les modifications de HEAD et merging_branch. >>>>> - Fin des lignes en conflit.

<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch

Lorsque vous corrigez vos fichiers en conflit et que vous êtes prêt à fusionner, il vous suffit d'exécuter git add et git commit pour générer le commit de fusion. Une fois la validation effectuée, git Push les modifications apportées à la branche.

Article de référence: Git merge .

0
Nesha Zoric