Note: Voir "EDITER" pour la réponse à la question actuelle
Tout d’abord, lisez Subversion Re-education de Joel Spolsky. Je pense que la plupart de vos questions recevront une réponse ici.
Une autre recommandation, l’exposé de Linus Torvalds sur Git: http://www.youtube.com/watch?v=4XpnKHJAok8 . Cet autre pourrait également répondre à la plupart de vos questions, ce qui est très divertissant.
BTW, quelque chose que je trouve assez drôle: même Brian Fitzpatrick et Ben Collins-Sussman, deux des créateurs originaux de Subversion ont déclaré dans une conversation Google "désolé pour cela" en se référant au fait que la subversion soit inférieure au mercurial (et aux DVCS en général).
Maintenant, IMO et, en général, la dynamique d'équipe se développent plus naturellement avec n'importe quel DVCS, et l'un des avantages remarquables est que vous pouvez vous engager hors ligne, car cela implique les éléments suivants:
- Vous ne dépendez pas d'un serveur et d'une connexion, ce qui signifie des temps plus rapides.
- Ne pas être esclave de lieux où vous pouvez obtenir un accès Internet (ou un VPN) juste pour pouvoir vous engager.
- Tout le monde a une sauvegarde de tout (fichiers, historique), pas seulement du serveur. Cela signifie que n'importe qui peut devenir le serveur .
- Vous pouvez vous engager de manière compulsive si vous en avez besoin sans déranger le code des autres . Les commits sont locaux. Vous ne vous mettez pas les pieds sur les pieds quand vous vous engagez. Vous ne détruisez pas les constructions ou les environnements des autres en vous engageant.
- Les personnes sans "accès de validation" peuvent valider (car s'engager dans un DVCS n'implique pas le téléchargement de code), en abaissant la barrière pour les contributions, vous pouvez décider de retirer leurs modifications ou non en tant qu'intégrateur.
- Cela peut renforcer la communication naturelle puisqu'un DVCS rend cela essentiel ... dans la subversion, ce que vous avez à la place sont des courses engagées, qui forcent la communication, mais en gênant votre travail.
- Les contributeurs peuvent s'associer et gérer leur propre fusion, ce qui signifie finalement moins de travail pour les intégrateurs.
- Les contributeurs peuvent avoir leurs propres branches sans affecter les autres (tout en pouvant les partager si nécessaire).
A propos de vos points:
- La fusion de l'enfer n'existe pas dans DVCSland; n'a pas besoin d'être manipulé. Voir le point suivant .
- Dans les DVCS, tout le monde représente une "branche", ce qui signifie qu'il y a des fusions à chaque fois que des modifications sont extraites. Les branches nommées sont une autre chose.
- Vous pouvez continuer à utiliser l'intégration continue si vous le souhaitez. Pas nécessaire à mon humble avis, pourquoi ajouter de la complexité?, Gardez simplement vos tests dans le cadre de votre culture / politique.
- Mercurial est plus rapide dans certains cas, git plus rapide dans d’autres. Pas vraiment aux DVCS en général, mais à leurs implémentations particulières, autant que je sache.
- Tout le monde aura toujours le projet complet, pas seulement vous. La chose distribuée a à voir avec ce que vous pouvez valider / mettre à jour localement, partager / prendre de l'extérieur de votre ordinateur s'appelle pousser / tirer.
- Encore une fois, lisez Subversion Re-education. Les DVCS sont plus faciles et plus naturels, mais ils sont différents, n'essayez pas de penser que cvs / svn === base de tout le versioning.
J'apportais de la documentation au projet Joomla pour aider à prêcher une migration vers les DVCS, et ici, j'ai réalisé quelques diagrammes pour illustrer la centralisation par rapport à la distribution.
Centralisé
Distribué en pratique générale
Distribué au maximum
Vous voyez dans le diagramme qu'il y a toujours un "référentiel centralisé", et il s'agit de l'un des arguments préférés des fans du contrôle de version centralisée: "vous êtes toujours en cours de centralisation", et non, vous ne l'êtes pas, car le référentiel "centralisé" n'est qu'un référentiel tous sont d’accord (p. ex. un dépôt officiel de github), mais cela peut changer à tout moment.
Il s’agit maintenant du flux de travail typique des projets Open Source (par exemple, un projet avec une collaboration massive) utilisant des DVCS:
Bitbucket.org est un peu l’équivalent de github pour mercurial. Sachez qu’ils ont un référentiel privé illimité avec un espace illimité. Si votre équipe est inférieure à cinq personnes, vous pouvez l’utiliser gratuitement.
La meilleure façon de vous convaincre d'utiliser un DVCS est d'essayer un DVCS. Chaque développeur DVCS expérimenté qui a utilisé svn / cvs vous dira que cela en vaut la peine et qu'il ne sait pas comment il a survécu.
EDIT : Pour répondre à votre deuxième édition, je peux simplement rappeler qu’avec un DVCS, votre flux de travail est différent, je vous déconseille de chercher des raisons de ne pas l’essayer à cause des meilleures pratiques , c’est comme lorsque les gens disent nécessaires car ils peuvent contourner des modèles de conception complexes avec ce qu’ils font toujours avec le paradigme XYZ; vous pouvez bénéficier de toute façon.
Essayez, vous verrez que travailler dans "une branche privée" est en fait une meilleure option. Une des raisons pour lesquelles je peux expliquer pourquoi la dernière est vraie est que vous perdez la peur de vous engager , ce qui vous permet de vous engager à tout moment et de travailler de manière plus naturelle.
En ce qui concerne "la fusion de l'enfer", vous dites "à moins que nous n'essayions", je dis "même si vous expérimentez + maintaing + en même temps que la version révisée v2.0 ". Comme je le disais plus tôt, la fusion de l'enfer n'existe pas, car:
- Chaque fois que vous validez une branche non nommée et que vos modifications rencontrent les modifications d'autres personnes, une fusion naturelle se produit.
- Étant donné que les DVCS collectent davantage de métadonnées pour chaque validation, moins de conflits se produisent lors de la fusion ... vous pouvez même appeler cela une "fusion intelligente".
- Lorsque vous vous heurtez à des conflits de fusion, voici ce que vous pouvez utiliser:
De plus, la taille du projet n'a pas d'importance. Lorsque je passais de la subversion, je voyais déjà les avantages tout en travaillant seul, tout se sentait bien. Les changesets (pas exactement une révision, mais un ensemble spécifique de modifications pour des fichiers spécifiques pour lesquels vous incluez un commit, isolé de l'état de la base de code) vous permettent de visualiser exactement ce que vous voulez dire en faisant ce que vous faisiez avec un groupe de fichiers spécifique. pas toute la base de code.
Concernant le fonctionnement des changesets et l’amélioration des performances. Je vais essayer de l'illustrer avec un exemple que j'aime donner: le commutateur de projet mootools de svn illustré dans leur graphe de réseau github .
Avant
Après
Ce que vous constatez, c’est que les développeurs sont capables de se concentrer sur leur propre travail tout en s’engageant. ) mais comme la fusion est plus intelligente ici, ils ne le font souvent jamais ... même en cas de conflit de fusion (ce qui est rare), vous ne passez que 5 minutes ou moins à le résoudre.
Je vous recommande de chercher quelqu'un qui sache utiliser mercurial / git et de lui dire de vous l'expliquer. En passant environ une demi-heure avec des amis à la ligne de commande tout en utilisant mercurial avec nos ordinateurs de bureau et nos comptes bitbucket, leur montrant comment fusionner, et même créant des conflits pour eux, afin de voir comment les résoudre dans des délais aussi ridicules que possible. eux le vrai pouvoir d'un DVCS.
Enfin, je vous recommanderais d’utiliser mercurial + bitbucket au lieu de git + github si vous travaillez avec des utilisateurs Windows. Mercurial est aussi un peu plus simple, mais git est plus puissant pour une gestion de référentiel plus complexe (par exemple, git rebase ).
Quelques lectures supplémentaires recommandées: