Tuto Git – Modifications simultanées de fichiers sans conflit

Objectif: Ce 3eme article dans la série « Tuto Git » a pour objectif de montrer une séquence de travail simultané sur les fichiers du même projet par deux développeurs différents. Il traite les cas de modifications sans conflit. Pré-requis: Les deux articles précédents sur l’installation et l’utilisation de Git sont lus et les manipulations exécutées.

1. Modification de fichiers différents:

Bien entendu ce cas de figure ne génère jamais de conflit. La modification inclu l’ajout et la suppression de fichiers. On part de la situation de l’article précédent. DEV1 modifie le fichier hello.sh en ajoutant des lignes:
echo "Hello world !" >> hello.sh
echo "Hola todo el mundo !" >> hello.sh
echo "Ciao mondo !" >> hello.sh
Ensuite il crée un nouveau fichier hello.txt avec l’éditeur vi:
vi hello.txt
Ajouter les lignes puis enregistrer:
Ce projet permet d'afficher bonjour dans les langues suivantes:
Français
Anglais
Espagnole
Italien
Il valide ensuite ses modifcations et les envoi sur le serveur Git:
git add hello.txt
git commit -am "Ajout de 3 langues"
git push
Le paramètre -am de la commande git commit permet d’indexer en une seule fois les modifications en ajoutant le commentaire. DEV2 de son côté, supprime le fichier hello.doc, pour cela il execute:
git rm hello.doc
git commit -am "Suppression de hello.doc"
git push
La dernière commande (envoi vers le serveur) échoue, le message de retour est claire: la copie locale n’est pas synchronisée avec le serveur. Il faudra executer:
git pull --no-edit
Les modifications de DEV1 sont alors récupérées.
git push
Cette fois l’envoi réussit. A ce niveau DEV1 ne pourra plus rien envoyer (push) avant de synchroniser sa copie de travail (pull). En tentant de le faire il obtiendra le même message d’erreur. Il a toujours le fichier hello.doc en local:
ls -l
git pull --no-edit
ls -l
Après la synchronisation (pull), le fichier hello.doc disparaît.

2. Modifications simultanées d’un même fichier:

Dans la situation actuelle DEV1 et DEV2 ont des copies locales identiques et synchronisées avec le serveur. DEV1 modifie le fichier hello.sh en modifiant uniquement la première ligne (ancien contenu: « Boujour tout le monde ! ») qui devient: « Boujour monde ! »
git commit -am "Modification message Français"
git push
En même temps DEV2 modifie le même fichier hello.sh en modifiant la troisième ligne (ancien contenu:« Hola todo el mundo ! ») qui devient: « Hola mundo ! »
git commit -am "Modification message Espagnol"
git push
La commande d’envoi au serveur push échoue car la copie locale n’est plus synchronisée.
git pull --no-edit
cat hello.sh
Les deux modifications sont fusionnées car il n’y a pas de conflit entre les deux.
git push
Permet alors d’envoyer la modification vers le serveur. DEV1 devra exécuter la commande git pull pour récupérer la dernière version fusionnée.]]>