Flot décentralisé avec Git

De Ensiwiki
Aller à : navigation, rechercher

Ici, nous supposons que vous connaissez les commandes et notions de base de Git, et souhaitez les appliquer à un travail collaboratif à l'Ensimag. Dans notre exemple, nous supposons que deux étudiants (mais le schéma est facilement extensible à N étudiants) Alice et Bernard, 1A, travaillent sur un projet sur depots.ensimag.fr. Comme Bernard est un geek, il aime bosser sur son portable-qui-est-trop-bien, tandis qu'Alice préfère rester sur une machine de l'Ensimag (ensipc).

Regardons l'organisation des dépôts Git : chaque contributeur aura son propre dépôt de travail, ainsi qu'un dépôt public servant à propager ses ajouts et modifications, une fois stables. Remarquez que cela rend le travail d'Alice et de Bernard indépendants : Alice peut se synchroniser sur Bernard sans risquer de recopier les bêtises qu'il a pondu à 4h du matin devant son café qu'il boit à la paille pour éviter de compromettre ses dures heures de labeur, et inversement. Une fois que Bernard sera sûr que son travail est montrable (testé et tout), il le publiera sur son dépôt public, duquel Alice pourra pull les changements.

Le dépôt de travail d'Alice sera sur sur compte Ensimag, tandis que celui de Bernard sera sur son ordinateur personnel. Les dépôts publics seront tous deux sur depots.ensimag.fr, serveur auquel les deux compères ont accès, accès qui se fera par SSH (avec des URL du type ssh://depots.ensimag.fr/depots/2014/uberprojet/).

Et voilà ! Un petit schéma pour récapituler le tout (les fléches droites représentent les push, les flèches en pointillés représentent les pull) :

 ensipc                depots.ensimag.fr            killermachine
+-------+             +-----------------+         +---------------+
A (privé) ----[push]----> A (public).....[pull].....>B (privé)
|                                                     |
|                                                     |
|                                                     |
|                                                     |
|                                                     |
`.........[pull]......... B (public)<-----[push]------+