Subversion assure le suivi de l'arborescence entière, pas seulement des fichiers. C'est une des raisons majeures pour lesquelles Subversion a été créé, dans le but de se substituer à CVS.
Voilà ce que cela implique, du point de vue d'un ancien utilisateur de CVS :
Les commandes svn add et svn
delete fonctionnent désormais aussi sur les
répertoires, de la même manière que sur les fichiers. Idem
pour svn copy et
svn move. Cependant, ces commandes n'ont
pas d'effet immédiat sur le dépôt ; en effet, elles ne
font que planifier l'ajout ou la
suppression des éléments concernés. Aucun changement n'a lieu
dans le dépôt tant que vous n'effectuez pas de propagation
(commande svn commit
).
Les répertoires ne sont plus de simples conteneurs ;
ils possèdent un numéro de révision tout comme les fichiers
(ou pour être plus précis, il faut parler du « répertoire
machin/
tel qu'il était à la révision
5 »).
Approfondissons ce dernier point. La gestion de versions d'un répertoire est un problème difficile ; comme nous voulons autoriser des copies de travail à cheval sur plusieurs révisions, des limitations apparaissent quand on essaie de pousser le modèle trop loin.
D'un point de vue théorique, nous définissons « la
révision 5 du répertoire machin
» comme
un ensemble d'entrées et de propriétés du répertoire. Maintenant,
supposons que nous ajoutons et supprimons des fichiers de
machin
, puis que nous propageons ces
modifications. Dire que nous avons toujours la révision 5 de
machin
est un mensonge. Cependant, si nous
changeons le numéro de révision de
machin
après la propagation, c'est aussi un
mensonge ; il peut y avoir d'autres changements sur
machin
que nous n'avons pas encore reçus
parce que nous n'avons pas encore effectué de mise à jour
(commande svn update).
Subversion traite ce problème en conservant discrètement, dans
la zone .svn
, le détail des ajouts et des
suppressions propagés. Par la suite, quand vous lancez
svn update
, ces informations sont prises en
compte et combinées avec celles du dépôt et le nouveau numéro de
révision du répertoire est alors positionné correctement. Ainsi,
c'est seulement après une mise à jour que vous pouvez
affirmer, sans risque de vous tromper, que vous disposez d'une
révision « parfaite » d'un répertoire.
La plupart du temps, votre copie de travail contient des
répertoires « imparfaitement » synchronisés.
De la même manière, un problème survient si vous essayez de propager des modifications de propriétés sur un répertoire. Normalement, la propagation devrait ajuster le numéro de révision du répertoire de la copie de travail locale. Mais là encore, ce serait un mensonge puisqu'il peut y avoir des ajouts et des suppressions que le répertoire n'a pas encore reçu en raison de la mise à jour qui n'a pas encore eu lieu. En conséquence, il n'est pas permis de propager des changements sur les propriétés d'un répertoire sans que ce répertoire ne soit préalablement mis à jour.
Pour plus d'informations sur les limitations de la gestion de versions des répertoires, reportez-vous à la section intitulée « Copies de travail mixtes, à révisions mélangées ».