Contrôle à la Source - systèmes distribués et Non distribués - Quelle est la différence?

je viens de lire le dernier article de Spolsky sur les systèmes de contrôle de version distribués vs. Non distribués http://www.joelonsoftware.com/items/2010/03/17.html . Quelle est la différence entre les deux? Notre société utilise TFS. Dans quel camp ça tombe?

14
demandé sur quamrana 2010-03-18 23:24:39

6 réponses

pour parler simplement, un système VCS centralisé (y compris TFS) a un stockage central et chaque utilisateur obtient et s'engage à cet endroit.

dans les VCS distribués, chaque utilisateur dispose du dépôt complet et peut effectuer des modifications qui sont ensuite synchronisées avec d'autres dépôts, un serveur n'est généralement pas vraiment nécessaire.

12
répondu Lucero 2010-03-18 20:31:16

la différence est dans le processus de publication:

  • un CVCS (centralisé) signifie: pour voir le travail de votre collègue, vous devez attendre qu'il publie (commit) dans le dépôt central. Vous pouvez alors mettre à jour votre espace de travail.
    • vous êtes un producteur actif : si vous ne publiez rien, personne ne voit rien.
    • vous êtes un consommateur passif : vous découvrez de nouvelles mises à jour lorsque vous Rafraîchissez votre espace de travail, et que vous devez faire face à ces changements, que vous le vouliez ou non.

.

  • un DVCS signifie: il n'y a pas de "référentiel central", mais à chaque espace de travail est un référentiel, et de voir le travail de votre collègue, vous pouvez vous référer à son repo et simplement retiré de son histoire à l'intérieur de votre repo.
    • vous êtes un producteur passif : n'importe qui peut" brancher " dans votre repo et tirer locales commits que vous avez fait dans leur propre repo local.
    • vous êtes un consommateur actif : toute mise à jour que vous tirez d'une autre pension n'est pas immédiatement intégrée dans votre branche active à moins que vous ne le fassiez explicitement (par fusion ou rebase).

système de contrôle de Version est sur la maîtrise de la complexité des changements dans les données (en raison de tâches parallèles et/ou de travaux parallèles sur une tâche), et la façon dont vous collaborez avec d'autres (d'autres tâches et/ou d'autres personnes) est très différente entre un CVCS et un DVCS.

TFS ( Team Foundation Server ) est un système de gestion de projet qui comprend un CVCS: Team Foundation Version Control (TFVC), centré sur la notion de"travail".

Son aspect centralisé renforce une cohérence (d'autres les éléments que seulement des sources)

Voir Aussi ce VSS to TFS document , qui illustre comment il est adapté à une équipe ayant accès à un référentiel.

Un référentiel signifie qu'il est plus facile de le maintenir (pas de synchronisation ou de rafraîchissement des données à effectuer), d'où le plus grand nombre d'éléments (listes de tâches, plans de projet, problèmes et exigences) gérés en TI.

31
répondu VonC 2010-03-18 21:32:26

Check out http://hginit.com . Joel a écrit un joli tutoriel pour Mercurial, qui est un DVD. Je n'avais jamais lu de DVD avant (J'ai toujours utilisé SVN) et je l'ai trouvé facile à comprendre.

4
répondu Cory Grimster 2010-03-18 20:46:08

un VCS centralisé (CVCS) implique un serveur central avec lequel on interagit. Un VCS distribué (DVCS) n'a pas besoin d'un serveur centralisé.

DVCS les extractions sont complet et autonome, y compris l'historique du dépôt. Ce n'est pas le cas avec CVC.

avec un CVCS, la plupart des activités nécessitent une interaction avec le serveur. Ce n'est pas le cas avec les DVCS, car ils sont des checksout "complets", l'historique de repo et tout.

vous devez écrire accès pour s'engager à un CVCS; les utilisateurs de DVCS "pull" changent les uns des autres. Cela conduit à plus de codage social facilité par les goûts de Github et BitBucket.

ce sont quelques éléments pertinents, il y en a sans doute d'autres.

3
répondu Grant Palin 2010-03-18 20:41:47

La différence est énorme.

dans les systèmes distribués, chaque développeur travaille dans son propre bac à sable; il a la liberté d'expérimenter autant qu'il veut, et ne pousse vers le dépôt "principal" que lorsque son code est prêt.

dans les systèmes centraux, tout le monde travaille dans le même bac à sable. Cela signifie que si votre code n'est pas stable, vous ne pouvez pas le vérifier, car vous briserez le code de tout le monde.

Si vous travaillez sur un caractéristique, il faudra naturellement un certain temps avant qu'il se stabilise, et parce que vous ne pouvez pas vous permettre de commettre tout code instable, vous vous asseyiez sur les changements jusqu'à ce qu'ils soient stables. Cela rend le développement vraiment très lent, surtout quand vous avez beaucoup de gens qui travaillent sur le projet. Vous ne pouvez tout simplement pas ajouter de nouvelles fonctionnalités facilement parce que vous avez ce problème de stabilisation où vous voulez que le code dans le coffre soit stable, mais vous ne pouvez pas!

avec des systèmes distribués, parce que chaque développeur fonctionne sur son propre bac à sable, il n'a pas besoin d's'inquiètent de l'apparence de quelqu'un d'autre code. Et parce que ces systèmes ont tendance à être vraiment bon à la fusion, vous pouvez toujours avoir votre codebase être à jour avec le dépôt principal tout en maintenant vos changements dans votre dépôt local.

1
répondu hasen 2010-04-12 06:53:50

je recommande la lecture de L'examen de Martin Fowler de Version Control Tools

bref, la différence essentielle entre CVCS et DVCS est que les premiers (dont TFS est un exemple) ont un dépôt central de code et dans le dernier cas, il y a plusieurs dépôts et personne n'est "par défaut" le dépôt central - ils sont tous égaux.

0
répondu mfloryan 2010-03-19 10:58:07