Dépôt Git partagé et dépôt en lecture seule

De Ensiwiki
Aller à : navigation, rechercher

Git est un gestionnaire de versions décentralisé. Contrairement aux outils centralisés (comme SVN), il est fait pour travailler avec plusieurs dépôts, et permet de faire des fusions d'un dépôt à l'autre.

Cette page explique l'utilisation de Git dans une configuration où :

  1. Le projet est initialisé et alimenté avec un dépôt disponible en lecture seule (typiquement, un dépôt fourni par un enseignant),
  2. Les étudiants souhaitent mettre en place un dépôt partagé privé pour leur équipe (typiquement, pour travailler ensemble sur un TP).

On prendra ici l'exemple du cours de Modélisation TLM en SystemC. Le dépôt 1. est hébergée ici : https://github.com/moy/cours-tlm.git et nous considèrerons deux étudiants, Alice et Bob. Le dépôt partagé (2.) sera hébergée sur le compte d'Alice.

Clonage du dépôt en lecture seule

Si ce n'est pas déjà fait, chaque étudiant peut récupérer un clone du dépôt (sur les serveurs de l'école, ou bien sur sa machine personnelle) :

alice> git clone https://github.com/moy/cours-tlm.git
bob> git clone https://github.com/moy/cours-tlm.git

Création du dépôt partagé

Le dépôt partagé doit être accessible par tous les membres de l'équipe. Le plus simple est de la faire sur le serveur de l'école (depots.ensimag.fr), à moins d'avoir son propre serveur !

Le principe est le même que pour la page Créer un dépôt partagé avec Git : on crée un dépôt sans arbre de travail (bare repository), et on donne les droits via les ACLs (ici et plus bas, remplacer bien sûr $annee par l'année en cours, par exemple /depots/2014/) :

alice@machine> ssh alice@depots.ensimag.fr
alice@depots.ensimag.fr> mkdir /depots/$annee/alice-et-bob/
alice@depots.ensimag.fr> chmod 700 /depots/$annee/alice-et-bob/
alice@depots.ensimag.fr> git init --bare /depots/$annee/alice-et-bob/cours-tlm-prive.git
alice@depots.ensimag.fr> autoriser-equipe /depots/$annee/alice-et-bob/ bob

Pour l'instant, le dépôt est vide.

Lien entre le clone et le dépôt partagé

On retourne maintenant dans le clone de travail (sur une machine de l'école ou sur une machine personnelle, ça ne change rien) :

alice@machine> cd ~/cours-tlm/

Git sait déjà où se trouve le dépôt public en lecture seule. On va lui indiquer où trouver le dépôt privé partagé. On va lui donner le nom « prive » :

alice@machine> git remote add prive ssh://alice@depots.ensimag.fr/depots/$annee/alice-et-bob/cours-tlm-prive.git

(le répertoire de travail est sur la même machine que le dépôt partagé, donc on peut accéder à cette dernière juste avec son chemin local)

On peut maintenant envoyer le contenu actuel du dépôt. Git travaille par défaut sur une branche qui s'appelle « master », on envoie donc la branche « master » au dépôt « prive » :

git push prive master

Bob fait la même chose de son côté.

On peut omettre la partie alice@ de l'URL si les logins locaux et distants sont identiques (c'est le cas quand on travaille sur les PC de l'école et sur depots.ensimag.fr).

Synchronisation des dépôts

Les deux utilisateurs peuvent maintenant travailler, faire des commits, faire des pull depuis le dépôt partagé et depuis le dépôt public :

  • git pull : récupérer les dernières versions du dépôt public (typiquement, les mises à jour faites par l'enseignant) et les fusionner avec le travail fait en local
  • git pull prive master : récupérer et fusionner les dernières versions de le dépôt partagé (i.e. le travail des co-équipiers)
  • git push prive master : envoyer ses dernières modifications à le dépôt partagé

Il est conseillé de faire un git push prive master après chaque git pull.