Systèmes distribués
Principe
Dans les systèmes distribués, le téléchargement ou la mise à jour des sources ne peuvent pas être réalisés sur un serveur distant. Pour travailler sur un entrepôt, un développeur doit au préalable le dupliquer intégralement sur sa machine. Le téléchargement de copies de travail et la mise à jour se font ainsi directement sur un même poste de travail.
Le mécanisme utilisé pour la duplication d'un entrepôt est en réalité la création d'une branche. Chaque développeur travaille sur sa propre branche, sans nécessité de mettre en place un entrepôt principal. Pour envoyer du contenu d'une branche à l'autre, les systèmes distribués s'appuient sur une comparaison de l'historique des mises à jour au lieu d'effectuer un comparatif des arborescences.
Les systèmes distribués les plus connus et utilisés sont Git, Bazaar et Mercurial.
![](../res/vcs-_distributed.png)
Les systèmes de gestion de versions distribués lèvent les principales limites vues dans la section précédente.
Le système de fusion de versions a été revu pour être massivement utilisé. Il exploite l'historique des modifications en plus du contenu des fichiers.
Chaque développeur dispose de son propre serveur de gestion de versions et peut travailler directement dessus. Lorsque des développements sont prêts, il envoie une demande de mise à jour à un autre serveur (version de production, version d'un autre utilisateur en charge des tests, etc.)
Le serveur de sources est dupliqué sur le poste de chaque utilisateur. Si une machine tombe en panne, seules les modifications locales, propre à la branche hébergée par cette machine seront perdues.
Les développeurs disposent d'un serveur de gestion de sources sur leur propre machine. Ils peuvent donc travailler localement et sans accès au réseau.
Limite
Une pratique courante dans l'usage des systèmes de gestion de sources centralisés consiste à importer, au sein d'un entrepôt, un sous-ensemble de sources issues d'un serveur tiers. En imposant la copie complète d'un entrepôt pour y travailler dans une branche séparée, les systèmes décentralisés ne sont pas conçus pour ce type d'usage.