1) clone
Notre première commande nous permettra de dupliquer un repositorie. Elle se nomme, comme de juste, clone.
Positionnons-nous (avec la console) dans le dossier dans lequel nous voulons créer notre nouveau dossier, et tapons la commande GIT :
clone /path/de/mon/premier/dossier nom_du_nouveau_dossier
Nous pouvons voir que notre dossier est bien cloné, que son historique est bien ici et que le projet comprend une unique branche : master. Tiens, on avait pas plusieurs branches dans notre repositorie originel ?
Bon, on avait donc plusieurs branches. Le problème c’est que la commande clone copie les branches, mais cache toutes les autres branches que master. Nous allons donc intégrer une commande qui les révèle :
git branche -a
Pour travailler dessus, il faut qu’on annonce la demande explicitement avec le flag b de checkout. La commande est :
git checkout -b branch_name branch/path
Et voilà, on a notre repository et toutes les branches qui nous intéressent !
2) push et pull
Maintenant que nous avons nos deux repositories, nous allons pouvoir travailler. Modifions le readme et commitons. Nos deux repositories 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. Il est également possible d’aller dans le répertoire cible et de « tirer » les modifications.
La commande pour pousser est push, suivi du repository cible et de la branche.
Attention : il est impossible de pousser sur la branche courante d’un répertoire. Faites bien attention, pour la prochaine étape, que le répertoire git-tutorial soit sur la branche master, vu que nous allons pousser sur la commande 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 la commande :
git pull origin testing
Ah, une erreur : la remote « origin » n’existe pas. Une remote est l’adresse d’un autre répertoire et effectivement nous ne l’avons pas créée. Nous allons le faire tout de suite avec la commande remote :
git remote add origin /path/to/directory
Après avoir réessayer avec le pull, notre répertoire est à jour.
Si vous avez eu une erreur, c’est que votre repository 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.
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 repositories, nous devons d’abord « merger » les deux répertoires sur un seul. Pour ça, il suffit de pull depuis un des deux repositories. Les modifications apportées par les commit de l’autre répertoire seront appliquées sur le nôtre. 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 avec la commande :
git pull origin master
Il y a bien un conflit. En cas d’oubli, nous pouvons le vérifier avec le statut du repository. Tapez git status, il y a un fichier dans « unmerged path ». Nous devons merger manuellement le fichier puis le marquer comme ok.
Pour faire cela, 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 répertoire, 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.
Dans un précédent tutoriel, nous avions 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.