Mon entreprise utilise actuellement Subversion, CVS, Mercurial et git.
Lorsque nous avons commencé il y a cinq ans, nous avons choisi CVS, et nous l'utilisons toujours dans ma division pour notre branche principale de développement et de maintenance des versions. Cependant, beaucoup de nos développeurs utilisent Mercurial individuellement comme un moyen d'avoir des points de contrôle privés sans la douleur des branches CVS (et particulièrement leur fusion) et nous commençons à utiliser Mercurial pour certaines branches qui ont jusqu'à environ 5 personnes. Il y a de fortes chances que nous abandonnions finalement CVS dans un an. Notre utilisation de Mercurial s'est développée de manière organique ; certaines personnes n'y touchent toujours pas, car elles sont satisfaites de CVS. Tous ceux qui ont essayé Mercurial ont fini par en être satisfaits, sans trop de difficultés d'apprentissage.
Ce qui fonctionne très bien pour nous avec Mercurial, c'est que nos serveurs d'intégration continue (faits maison) peuvent surveiller les dépôts Mercurial des développeurs ainsi que la ligne principale. Ainsi, les gens commettent dans leur dépôt, demandent à notre serveur d'intégration continue de le vérifier, puis publient le jeu de modifications. Nous prenons en charge de nombreuses plates-formes et il n'est donc pas possible d'effectuer un niveau décent de vérifications manuelles. Un autre avantage est que les fusions sont souvent faciles, et quand elles sont difficiles, vous disposez des informations nécessaires pour faire un bon travail sur la fusion. Une fois que quelqu'un a réussi à faire fonctionner la version fusionnée, il peut pousser ses jeux de modifications de fusion et personne d'autre ne doit répéter l'effort.
Le plus gros obstacle est que vous devez recâbler le cerveau de vos développeurs et gestionnaires pour qu'ils s'éloignent du modèle de la branche linéaire unique. Le meilleur remède pour cela est une dose de Linus Torvalds vous disant que vous êtes stupide et moche si vous utilisez un SCM centralisé. De bons outils de visualisation de l'historique seraient utiles, mais je ne suis pas encore satisfait de ce qui est disponible.
Mercurial et CVS fonctionnent bien pour nous, avec des développeurs qui utilisent un mélange de Windows, Linux et Solaris, et je n'ai remarqué aucun problème avec les fuseaux horaires. (En réalité, ce n'est pas trop difficile ; il suffit d'utiliser les secondes d'époque en interne, et je pense que tous les principaux systèmes SCM le font correctement).
Il a été possible, avec un certain effort, d'importer notre historique CVS dans Mercurial. Cela aurait été plus facile si des personnes n'avaient pas délibérément introduit des cas de figure dans notre historique CVS principal afin de tester les outils de migration d'historique. Cela a inclus la fusion de certaines branches Mercurial dans l'historique CVS, de sorte que le projet ressemble à ce qu'il utilisait dès le premier jour.
Notre groupe de conception de silicium a choisi Subversion. Ils sont pour la plupart à huit fuseaux horaires de mon bureau, et même sur une ligne dédiée assez bonne entre nos bureaux, les vérifications de Subversion sont douloureuses, mais réalisables. Un grand avantage des systèmes centralisés est que vous pouvez potentiellement y archiver de gros binaires (par exemple les versions des fournisseurs) sans rendre tous les dépôts distribués énormes.
Nous utilisons git pour travailler avec le noyau Linux. Git nous conviendra mieux lorsqu'une version native pour Windows sera mature, mais je pense que la conception de Mercurial est si simple et élégante que nous nous y tiendrons.