DVCS : introduction, principe et bonnes pratiques

_images/code-tree.jpg

Historique

Trois générations de systèmes de contrôle de version.

Réseau Opérations Concurrence Exemples
Aucun Mono-fichier Verrous RCS, SCCS
Centralisé Multi-fichiers Branch/Merge complexe CVS, Subversion
Distribué Jeu de modifications Branch/Merge généralisé Git, Mercurial

_images/computerhistory.jpg

Les bases des DVCS

Assez semblables aux outils de deuxième génération.

4 concepts en plus :

Clone : créer un nouveau dépôt en dupliquant un dépôt d'origine

Deuxième génération (centralisé) :

_images/cvcs_topology.jpg

Troisième génération (décentralisé) :

_images/dvcs_topology.jpg

Push


Envoyer un jeu de modifications du dépôt local vers un dépôt distant

_images/op_push.jpg

Les deux dépôts ne sont pas forcément identiques après cette opération.

Pull


Récupérer un jeu de modifications d'un dépôt distant vers le dépôt local

_images/op_pull.jpg

Synchro complète de deux instance => pull complet du dépôt distant + push complet du dépôt local

Les DAG

Deuxième génération (centralisé) :

_images/repo_history_dag_merged.jpg

Troisième génération (décentralisé) :

_images/repo_history_dag_chaos.jpg

Avantages : copie privée du dépôt

Objectif : limiter le nombre d'opérations de synchronisation (comme pour le multi-thread)

Développeurs 1 4 10
 
_images/team_complexity_1.jpg
_images/team_complexity_5.jpg
_images/team_complexity_10.jpg
Connections 0 6 45

Avantages : rapidité


Temps d'un commit sur l'arbre entier de Valgrind [1]

Operation Subversion [2] Bazaar Mercurial Git
Commit (s) 21.9 5.2 4.6 3.2


[1]Valgrind : 3,143 fichiers; 42 MB
[2]svnserve sur 127.0.0.1

Avantages : multi-sites


Plus grande flexibilité dans la gestion des synchronisation entre plusieurs sites.

_images/dvcs_geography.jpg

Avantages : répartition de charge


Permet d'alléger la criticité du dépôt central.


_images/dvcs_scale_out.jpg

Autres avantages


Inconvénients

_images/great-developers-slightly-autistic.jpg

Bonnes pratiques collectives

Bonnes pratiques individuelles

Autres bonnes pratiques

_images/gitmerge.jpg

Références

Version Control by Example, Eric Sink
Comparaison des commandes Git/Mercurial, Eric Sink
Utilisation de git pour LSST, Mario Juric
Documentation de référence de git