• A la une
  • Catégories
  • Dossiers
  • Rédacteurs
  • +

GIT Tutoriel #2 : Synchroniser plusieurs répertoires

par Benjamin SANCHEZle 16/05/2012

Deuxième article de la série pour apprendre et découvrir Git. Aujourd’hui, la gestion des repository.

Introduction

Il y'a quelques semaines nous avions vu Comment installer GIT et Comment manager son projet GIT

C'est bien de savoir gérer ses projets avec git, mais se limiter à ça serait triste. En effet, une des fonctionnalités centrale de git (et de tous versions manager) est de pouvoir travailler à plusieurs. Ce sera la leçon d'aujourd'hui.

La semaine dernière, nous avions vu comment manager son projet en séparant ses modifications en différents commits et branches. Nous avions obtenu un "projet" git simple, avec un simple fichier README, existant dans deux branches sous deux versions différentes. Nous allons réutiliser ça comme point de départ, pour apprendre 4 nouvelles commandes Git qui nous permettrons de travailler avec plusieurs dossiers, ou repositories (ou "repo" pour faire plus court).

Travailler sur plusieurs repo

1 - clone

Notre première commande nous permettra de dupliquer un repo. 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 repo originel? 

Bon, on avait donc plusieurs branches. Le truc, c'est que clone copie les branches, mais cache toutes les autres branches que master. git branche -a les révèle.

Pour travailler dessus, il faut qu'on annonce le demande explicitement, avec le flag b de checkout. La commande est git checkout -b branch_name branch/path

Et voilà, on a notre repo, et toutes les branches qui nous intéressent !

2 - 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.

Pour finir

Nous avons vu comment travailler avec deux dossiers, mais uniquement en local, ce qui n'est pas très utile pour collaborer dans la plupart des cas. Pour travailler à plusieurs, sachez que le chemin du repo d'en face peut très bien être distant, les informations passeront donc par ssh. Cette solution, bien que pratique car ne demandant pas d'installation, n'est pas ma préféré, car on se retrouve assez souvent avec des problèmes de droits quand on veut push, et qu'il faut faire attention a la branche courante. De plus, elle demande aux deux pc d'être allumés et connectés pour fonctionner.

Le mieux reste de passer par un server, que ce soit github, gitorious ou bien un gitosis hébergé sur un server personnel. Et ça tombe bien, ça sera la leçon de la semaine prochaine : Comment installer et configurer gitosis sur un server.

Pour aller plus loin, je vous conseille d'aller vous inscrire sur github et de lire leur documentation. En quelques minutes, vous aurez ouvert votre premier repo et pourrez push dessus.


  • Partager l'article en 1 clic !

    N'hésitez pas à aider le BlogDuWebdesign
Avatar_thumbAuteur : Benjamin voir son blog

Développeur autodidacte depuis quelques années, déjà, je suis le développeur du blog du webdesign, où mon rôle est de concretiser les différentes idées et maquettes.

Devenez membre !

Rejoignez la communauté des créatifs du web !
- Partagez vos créations
- Gagnez en visibilité
- Créez votre blog facilement
> En savoir plus

Créer mon compte

3Commentaires

  • Avatar_thumb
    GromNaN

    le 16/05/2012 | #1

    Et pour une syncho à l'identique entre deux dépôts, rien de vaut git push --mirror

  • Avatar_thumb
    GitStack

    le 17/05/2012 | #2

    Ca y est, je vois que le 3ème tutoriel sur Git est publié. Félicitations et je vous remercie pour tous les internautes qui vous lisent car ce partage d'expérience est très enrichissant.

    Sinon, je pense qu'un petit tutoriel sur l'utilisation de Github serait une bonne idée. Je vous laisse mettre de cette décision.

    Bonne soirée,

  • Avatar_thumb
    Jérôme

    le 18/05/2012 | #3

    Moi je ne connaissais pas git avant de découvrir ce blog, merci à vous en tout cas, c'est vraiment pas mal.

Ecrire un commentaire

captcha

Ouvrir