Pas de notions de patch. CVS gère les fichiers d'un projet, il n'a pas de notion de patch, ie pas de notion d'unité pour un commit donné. Les versions sont fichier par fichier, si je commite 10 fichiers simultanément, cela revient à faire 10 commits. Autrement dit, il est difficile a posteriori de retrouver les modifications des fichiers correspondant à une correction. La solution de contournement consiste à abuser des tags.

Impossible de renommer un fichier sans en perdre l'historique : dans CVS, mieux vaut ne pas avoir besoin de renommer un fichier. 2 solutions : la propre consiste à supprimer le fichier de CVS par "cvs remove fichier1", puis à rajouter le fichier renommer "cvs add fichier1bis". On perd tout l'historique :-/. Solution "moins propre" : renommer le fichier directement dans le dépôt. On garde tout l'historique, mais cela pose un problème philosophique : le snapshot d'un module sur une date donné ne doit pas changer quelque soit la date de la fabrication du snapshot.

Répertoires non versionnés. Lorsqu'on rajoute un répertoire sur une branche, le répertoire devient présent sur toutes les branches (illogique).

Notion de branche ajoutée a posteriori. Clairement, lorsqu'on utilise CVS, on se rend compte que la notion de branche ne faisait pas parti des objectifs de départ. Je ne peux pas croire que CVS ait été conçu en prenant en compte les branches. Sous CVS, une branche est un tag spécial, une fusion est un update déguisé. L'absence de numéros de version propre à l'intégralité du dépôt oblige à poser de très nombreux tags sur l'ensemble de la distribution. Bref, à chaque fois que je fusionne les corrections d'une branche sur une autre, j'ai la désagréable impression de bidouiller. A mon travail, nous avons environ une vingtaine de branches en parallele et ça commence à devenir le bordel.

Evidemment, Subversion répond à toutes ces problématique. Il n'y a pas de secret : à l'origine, ce sont des experts CVS qui ont conçu, 15 plus tard, Subversion. L'objectif de Subversion est clair : être dans la lignée de CVS, sans les limites de CVS. Subversion a ses limites, mais elles sont plutôt liées aux choix des développeurs entre un mode centralisé et distribué.

Aujourd'hui reporter une correction entre la branche 1.5 et le tronc commun, c'est que du bonheur. Prochaine étape : migrer le référentiel CVS de ma boîte, mais c'est une autre échelle de grandeur que PhpWebGallery :-)