Git push et pull
Maintenant que nous avons nos deux repo, nous allons pouvoir travailler. Modifions le readme, et commitons. Nos deux repo sont maintenant différents. Pour synchroniser, nous avons deux choix. Il est possible de « pousser » les modifications du répertoire de destination au répertoire cible. Ou bien il est possible d’aller dans le répertoire cible et de « tirer » les modifications.
La commande pour pousser est push, suivi du repo cible et de la branche.
Attention : il est impossible de pousser sur la branche courante d’un repo. Faites bien attention, pour la prochaine étape, que le repo git-tutorial soit sur la branche master, vu que nous allons pousser sur testing.
Tapons donc git push origin testing.
Et voilà, notre branche distante est maintenant à jour ! Remettons nous sur la branche testing, puis remodifions le fichier README. Commitons, puis changeons d’endroit. Direction notre répertoire git-tutorial. De là, tapons git pull origin testing.
Ah, une erreur : la remote « origin » n’existe pas. Une remote est l’adresse d’un autre repo, et effectivement, nous ne l’avons pas créée. Nous allons le faire tout de suite avec la commande remote. Tappons git remote add origin /path/to/directory, puis réessayons le pull.
Voilà, Normalement ça passe et notre repo est a jour.
Si vous avez eu une erreur, c’est que votre repo n’est pas clean. Comprenez par là qu’il y a des changements non commités. Cela n’est bloquant que quand ces changements sont sur un des fichiers qui vas être modifié par le pull. Essayez donc de checkout ou de commit ces changements, puis réessayez.
Une dernière situation : et si les deux répertoires ont des modifications, comment fait-on pour synchroniser ? Pour commencer, modifiez les deux readme de manières différentes, en pensant bien à commiter. Les modifications doivent intervenir sur la même ligne, disons la première.
Pour synchroniser les deux repo, nous devons d’abord « merger » les deux repo sur un seul. Pour ça, il suffit de pull depuis un des deux repo. Les modifications apportées par les commit de l’autre repo seront appliquées sur le notre, et voilà. Si les fichiers modifiés sont différents, ou bien si les modifications d’un même fichier touchent des lignes différentes, le merge sera automatique, et rien ne vous sera demandé.
Par contre, ici, il vas y avoir un conflit, vu qu’on a modifié la première ligne de README sur les deux repo. Essayez de git pull origin master
Il y a bien un conflit. En cas d’oubli, nous pouvons le vérifier avec le statut du repo. Tapez git status, il y a un fichier dans « unmerged path ». Nous devons merger manuellement le fichier, puis le marque comme ok.
Pour ça, ouvrez le dans un éditeur de texte.
Notre version est dans « head », et l’autre est nommée par le commit qui l’a modifié. Il faut corriger le fichier, enregistrer, puis faire un git add sur le fichier incriminé pour que git sache que cette version est la bonne. Nous pouvons ensuite commiter le merge (notez que le message de validation renvoyé par la commande est merge et pas commit). Pour synchroniser l’autre repo, nous devons encore push nos modifications sur origin, comme tout à l’heure (pensez à faire attention à la version en cours de vos branches.
Voilà, nos deux repo sont a jour.
La semaine dernière, j’avais parlé de branches. Sachez qu’il est possible de merger deux branches avec la commande git merge. L’action se fait exactement de la même manière qu’en faisant un pull depuis une branche distante. Si tout va bien, le merge est automatique, sinon, il faut merger, avec la même technique que celle décrite précédemment.