60 votes

Fusionner la résolution des conflits

Lorsqu'il y a un conflit de fusion dans Git, un texte comme celui qui suit est inséré dans les fichiers en conflit. Trois questions :

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

enter image description here

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

1 votes

Duplicata possible de Comment résoudre les conflits de fusion dans Git ? - Lien n°1 si vous recherchez "git merge conflicts" sur Google.

36voto

Simon Richter Points 11471

Tout ce qui se trouve entre <<<<<< y ====== vient de la HEAD qui est l'état validé avant de commencer l'opération de fusion ( git merge se plaindra si l'arbre est sale, donc il devrait être équivalent à votre répertoire de travail).

Les parties entre ====== y >>>>>> proviennent de la version en cours de fusion. 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 indiquée.

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

0 votes

Merci, Simon. N'y a-t-il pas une application GUI qui puisse ouvrir ces fichiers et afficher la version HEAD et la version fusionnée côte à côte ?

0 votes

Pouvez-vous m'indiquer quelles informations de ce lien sont utiles ? Le manuel git m'est inaccessible.

0 votes

@ChristopherJamesCalo, kdiff3 est un outil GUI.

22voto

Il existe désormais une meilleure solution que d'essayer de lire les marqueurs en charabia que Git insère dans vos fichiers. Kaléidoscope 2 La deuxième version de l'outil de différenciation de Black Pixel est maintenant aussi un outil de fusion. Il n'est pas gratuit, mais il fonctionne à merveille.

Après avoir installé Kaléidoscope 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.

Vous verrez alors cette fenêtre. Choisissez simplement Git dans le menu de gauche, puis installez le ksdiff puis faire de Kaléidoscope l'outil de comparaison et de fusion par défaut de Git.

Kaleidoscope's Git Integration dialog.

Enfin, une fois que vous avez un conflit de fusion dans Git, il suffit d'aller à la ligne de commande et d'exécuter git mergetool . Maintenant, le conflit est facile à lire. Profitez-en.

Kaleidoscope sane view for merge conflicts.

1 votes

@FrankFang il vous suffit de fermer la fenêtre lorsque tous les conflits sont résolus. Il vous sera alors demandé si la fusion s'est bien déroulée.

0 votes

C'est une solution alternative si le mieux est subjectif. Si vous êtes sous macOS, vous pouvez également essayer l'outil de fusion intégré opendiff (qui fait partie des outils Xcode) ; définissez "opendiff" comme l'outil de fusion par défaut de manière globale : git config --global merge.tool opendiff voir aussi stackoverflow.com/a/25625663/880188 EDIT : ou simplement voir ci-dessous ;)

17voto

sparrow Points 755
<<<< HEAD #Where the conflict starts

#Previous Revision

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

#Things that changed

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

Xcode pour Mac est livré avec FileMerge qui peut être accédé en ligne de commande avec opendiff .

git mergetool -t opendiff

2 votes

Qu'est-ce que cela signifie si rien n'a changé pour #Things, mais que j'ai quand même un conflit ?

0 votes

Git mergetool -t opendiff a été la réponse pour moi. Merci.

4voto

manojlds Points 96599

Vous pouvez configurer un outil de fusion (graphique) et utiliser cet outil pour effectuer la résolution des conflits.

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

Si vous vous intéressez aux outils GUI, vous ne devez 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 parties marquées par ===== y >>>>> sont les sections de conflit.

1 votes

Pouvez-vous me donner un exemple d'une application Mac GUI qui peut lire ces fichiers et m'expliquer comment les ouvrir ? J'ai essayé d'ouvrir ces fichiers dans différents outils de comparaison et de fusion, et ils s'ouvrent simplement comme un seul fichier texte au lieu d'être interprétés comme deux fichiers. (Ce qui est le but des marqueurs de conflit).

0voto

Nebojsa Zoric Points 41

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

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

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

Lorsque vous avez corrigé vos fichiers en conflit et que vous êtes prêt à fusionner, tout ce que vous avez à faire est d'exécuter git add y git commit pour générer le commit de fusion. Une fois que le commit a été fait , git push les changements dans la branche.

Article de référence : Fusion de Git .

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