Objectif: Comprendre la démarche pour effectuer une fusion (merge) de plusieurs fichiers avec des conflits de modification multiples. Pré-requis: Git est installé et confiiguré sur un système GNU/Linx (article 1 de la serie « Tuto Git ». Les commandes de base sont connues et un outil de fusion (mergetool) est configuré.
1. Ajouter un troisième développeur à la simulation
Exécuter dans l’ordre:sudo mkdir /pcdev3 sudo chown login:login /pcdev3 cd /pcdev3 git clone /serveurgit/hello.git cd hello git config --local user.email "DEV3@server.com" git config --local user.name "DEV3"
2. Ajouter un fichier qui va subir les conflits multiples de modification.
DEV3 crée un nouveau fichier README (avec l’éditeur vi par exemple) et l’ajoute au dépôt. Le contenu de ce fichier est:Pour utiliser ce logiciel d'affichage de messages: ./hello.sh La réponse sera: Affichage Bonjour tout le monde en 4 langues.Ensuite, DEV3 exécute:
git add README git commit -m "Création de README" git pushSuite à cela DEV1 et DEV2 exécutent: git pull, chacun de son côté, pour récupérer le nouveau fichier.
3. Effectuer les modifications des fichiers pour se mettre en situation.
3.1. DEV3 (cd /pcdev3) modifie le fichier README pour que son contenu devienne:
Pour utiliser ce logiciel exécuter: ./hello.sh La réponse est alors: Affichage "Hello world" d'abord, ensuite 3 autres langues.Ensuite il exécute:
git commit -am "Modification de README" git push
3.2. DEV2 (cd /pcdev2) modifie le fichier hello.txt pour que le contenu de la 1ere ligne devienne:
Affichage de "bonjour tout le monde" dans les langues suivantes:Ensuite il exécute:
git commit -am "Modification de la 1ere ligne de hello.txt" git push
3.3. DEV1 (cd /pcdev1) modifie le fichier README pour que son contenu devienne:
Utilisation: ./hello.sh Réponse: Affichage "Bienvenue" en 4 langues.
3.4. DEV1 modifie le fichier hello.txt pour que le contenu de la 1ere ligne devienne:
"Bienvenue" en:
4. Fusion des deux fichiers en conflit.
Quand DEV1 tentera d’envoyer ses modifications sur le serveur, il y aura 4 conflits: 3 dans README et 1 dans hello.txt. DEV1 exécute donc:git commit -am "Simplification de README et hello.txt" git pushLa deuxième commande échoue à cause du conflit, DEV1 doit alors effectuer une fusion (merge).
git pull git mergetooll’outil paramétré (ici vimdiff) est lancé et DEV1 peut arbitrer les conflits un à un:
Merge du fichier hello.txt – affichage initial
Déplacer le curseur dans la zone du conflit et lancer la commande: diffget LOCAL, pour récupérer la copie locale
Après la validation de la commande diffget le conflit est résolu et la modification doit être enregistrée (:wqa)
Aussitôt l’enregistrement effectué, l’outil passe au fichier suivant en confli: README
Après la résolution, de la même manière des trois zones de conflit dans ce fichier, l’enregistrement entraine la fin du traitement (:wqa)
Pour valider l’arbitrage effectué:git commit -m "Fusion" git pushBien entendu, à ce stade seul DEV1 dispose en local de la version finale issur de la fusion. DEV2 et DEV3 doivent exécuter git pull pour synchroniser leurs copies locales respactives.]]>