52 votes

Distribué Systèmes de Contrôle de Version et de l'Entreprise - un Bon mélange?

Je peux voir pourquoi distribués, systèmes de contrôle de source (DVCS - comme Mercurial) font sens pour les projets open source.

Mais ont-ils un sens pour une entreprise? (plus d'une Source centralisée du Système de Contrôle tels que TFS)

Quelles sont les caractéristiques d'un DVCS le rendre meilleur ou pour le pire adapté pour une entreprise avec de nombreux développeurs? (sur un système centralisé)

95voto

VonC Points 414372

J'ai juste introduit un DVCS (Git dans ce cas) dans une grande société bancaire, où Perforce, SVN ou ClearCase ont été centralisée VCS de choix:
Je connaissais déjà des défis (voir ma réponse précédente "Peut-on enfin passer à l'DVCS dans les Logiciels d'Entreprise? Est SVN encore un "must have" pour le développement?")

J'ai été questionnée sur trois fronts:

  • centralisation: alors que le modèle décentralisé a ses mérites (et privé s'engage ou non le réseau tout en ayant accès à la pleine histoire), il y a encore besoin d'être un ensemble clair de centralisé de repos, agissant comme la principale référence pour tous les développeurs.

  • authentification: un DVCS vous permet de "signer" (commit) votre code... à peu près n'importe qui (l'auteur de "foo", l'e-mail "foo@bar.com").
    Vous pouvez faire un git config user.name fooou git config user.name whateverNameIFeelToHave, et d'avoir tous vos commits avec un faux nom.
    Qui ne se mélangent pas bien avec de l'unique centralisé "Active Directory" utilisateur référentiel utilisé par les grandes entreprises.

  • autorisation: par défaut, vous pouvez le copier, de pousser ou de tirer à tout référentiel, et de modifier toute une branche, ou n'importe quel répertoire.
    Pour les projets sensibles, qui peut être un problème de blocage (le monde bancaire est généralement très protectrice à l'égard de certains prix ou quants des algorithmes, qui imposent un strict accès en lecture/écriture pour un nombre très limité de personnes)

La réponse (pour une installation de Git) est:

  • centralisation: un unique serveur a été configuré pour n'importe quel référentiel d'avoir à être accessible par tous les utilisateurs.
    La sauvegarde a été en prenant soin de incrémentiel (chaque jour, chaque semaine).
    DRP (Disaster Recovery Plan) a été mis en œuvre, avec une deuxième serveur sur un autre site, et en temps réel de la réplication de données à travers SRDF.
    Cette configuration en elle-même est indépendante du type de référentiel ou de l'outil dont vous avez besoin (DVCS, ou Nexus repo, ou principal Hudson planificateur, ou...): un outil qui peut être critique pour une version en production doit être installé sur les serveurs de sauvegarde et de la DR

.

  • authentification: seulement deux protocoles permettent aux utilisateurs d'accéder aux principales repos:
    • ssh, avec une clé publique/privée:
      • utile pour les utilisateurs externes à l'organisation (comme off-shore de développement),
      • et utile pour les génériques de comptes Active Directory manager ne voulez pas créer (parce que ce serait un compte "anonyme"): une personne doit être responsable de compte générique, et qui serait celui qui détient la clé privée
    • https, avec un Apache authentifier les utilisateurs par le biais d'un paramètre LDAP: de cette façon, une réelle connexion doit être fourni pour toute git opération sur les titres.
      Git propose avec son smart protocole http, permettant non seulement pull (lu) via http, mais aussi push (écrire) via http.

La partie authentification est également renforcée sur le Git niveau par un post-receive crochet qui permet de s'assurer qu' au moins un de la vous engage poussent à une pension a un "committer" nom correspond au nom d'utilisateur détecté par shh ou le protocole http.
En d'autres mots, vous devez configurer votre git config user.name correctement, ou tout poussez vous souhaitez vous rendre à un centre de pensions sera rejetée.

.

  • autorisation: les deux paramètres précédents (ssh ou https) sont câblés pour appeler le même ensemble de script perl nommé gitolite, avec comme paramètres:
    • le véritable nom d'utilisateur détecté par ces deux protocoles
    • la commande git (clone, pousser ou tirer) que l'utilisateur veut faire

Le gitolite script perl qui va analyser un simple fichier texte où les autorisations (accès en lecture/écriture pour tout dépôt ou les branches à l'intérieur d'un référentiel, ou même pour les répertoires au sein d'un référentiel) ont été mis en.
Si le niveau d'accès requis par la commande git ne correspondent pas à l'ACL définis dans ce fichier, la commande est rejetée.


Le ci-dessus décrit ce que j'ai dû mettre en place pour un Git, mais plus important encore, il énumère les principales questions qui doivent être abordées pour un DVCS réglage à faire sens dans une grosse société avec un unique utilisateur de la base.

Alors, et alors seulement, un DVCS (Git, Mercurial, ...) peuvent ajouter de la valeur à cause de:

  • l'échange de données entre plusieurs sites: bien que ces utilisateurs sont authentifiés par le biais d'Active Directory même, ils peuvent être situés partout dans le monde, les entreprises, j'ai travaillé pour des développements généralement entre les équipes à l'échelle de deux ou trois pays). Un DVCS est naturellement fait pour l'échange efficace de données entre les équipes distribuées.

  • la réplication à travers des environnements: un paramètre à prendre soin de l'authentification/autorisation permet le clonage de ces dépôts sur d'autres serveurs dédiés (pour les tests d'intégration, tests UAT, pré-production et de pré-déploiement fins)

  • l'automatisation des processus: la facilité avec laquelle vous pouvez cloner une pension peut également être utilisé localement sur un poste de travail utilisateur, pour l'unité des fins de test avec le "surveillé s'engage techniques" et d'autres utilisations ingénieuses: voir "Ce qui est le plus habile utilisation de la source de dépôt que vous avez jamais vu?".
    En bref, vous pouvez pousser un second local repo en charge de:

    • diverses tâches (test de l'unité ou de l'analyse statique du code)
    • en poussant sur le repo si ces tâches sont couronnées de succès
    • alors que vous êtes encore dans la première pensions sans avoir à attendre le résultat de ces tâches.

.

  • killer caractéristiques: Tout DVCS est livré avec ceux-ci, le principal étant la fusion (jamais essayé d'en faire un complexe de fusion de flux de travail avec SVN? Ou sloooowly de fusion 6000 fichiers avec ClearCase?).
    Que seul (fusion) signifie que vous pouvez vraiment profiter de la ramification, tout en étant en mesure à tout moment à fusionner vous code à l'autre "principal" ligne de développement, parce que tu voudrais faire:
    • d'abord localement, au sein de votre propre repo, sans déranger personne
    • ensuite, sur le serveur distant, en poussant le résultat de cette fusion sur le repo central.

1voto

Peter Rowell Points 12444

À ajouter aux autres commentaires, je ferais remarquer qu'il n'y a aucune raison que vous ne pouvez pas avoir un service Central d'archives. Techniquement, c'est juste un autre référentiel, mais c'est celui que vous livrez la production. J'ai été en utilisant une forme ou une autre de la cité du vatican depuis plus de 30 ans et je peux dire que la commutation de l'Mercurial était comme un garçon de la ville de respiration propre pays de l'air pour la première fois.

1voto

Ade Miller Points 7750

Les CDD ont une meilleure histoire (en général) que les systèmes centralisés pour hors-ligne ou les réseaux lents. Ils ont tendance à être plus rapide, ce qui est vraiment notable pour les développeurs (à l'aide de TDD) qui font beaucoup de check-ins.

Systèmes centralisés sont un peu plus faciles à saisir d'abord et peut-être un meilleur choix pour les développeurs moins expérimentés. DVCSes vous permettent de créer des lots de mini-branches et d'isoler de nouvelles fonctionnalités tout en faisant rouge-gree-refactoriser checkin sur le vert de style de codage. Encore une fois c'est très puissant, mais seulement attrayant pour assez de jugeote équipes de développement.

Avoir un seul référentiel central pour le soutien des verrous exclusifs de sens que si vous travaillez avec des fichiers qui ne sont pas mergable comme des actifs numériques et non des documents texte (Pdf et Word, etc), car il vous empêche de vous faire vous-même dans un désordre et manuellement la fusion.

Je ne pense pas que le nombre de développeurs ou de la base de code de taille joue beaucoup, les deux systèmes ont été show à l'accompagnement des grands arbres et le nombre de participants. Toutefois, pour les grandes bases de code et des projets DVCS donne beaucoup de flexibilité à créer rapidement décentralisée branches distantes. Vous pouvez le faire avec les systèmes centralisés, mais vous devez être plus délibérer au sujet de ce qui est à la fois bon et mauvais.

En bref il y a quelques aspects techniques à considérer, mais vous devez également penser à la maturité de votre équipe et de leur processus actuel autour de la SCC.

0voto

Brook Points 3985

Pour moi, la plus grande chose qu'ils proposent est la Vitesse. Ils sont des ordres de grandeur plus rapide pour les opérations les plus courantes que les centralisé de contrôle de la source.

Travail déconnecté est également un gros plus.

0voto

Jim Bolla Points 4079

Notre équipe de TSF pendant environ 3 ans avant de passer à l'Mercurial. HG de la branche/de fusion de soutien est tellement mieux que la TSF. C'est parce qu'un DVCS s'appuie sur indolore à la fusion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X