La commande svn switch transforme une
copie de travail existante de telle sorte qu'elle pointe vers
une branche différente. Bien que la connaissance de cette
commande ne soit pas absolument nécessaire pour travailler avec
des branches, elle fournit un raccourci utile. Dans notre
exemple précédent, après avoir créé votre branche privée, vous
avez extrait une toute nouvelle copie de travail du nouveau
répertoire du dépôt. À la place, vous pouvez simplement
demander à Subversion de modifier votre copie de travail de
/calc/trunk
pour qu'elle pointe vers
l'emplacement de la nouvelle branche :
$ cd calc $ svn info | grep URL URL: http://svn.exemple.com/depot/calc/trunk $ svn switch http://svn.exemple.com/depot/calc/branches/ma-branche-calc U entier.c U bouton.c U Makefile Actualisé à la révision 341. $ svn info | grep URL URL: http://svn.exemple.com/depot/calc/branches/ma-branche-calc
« Faire pointer » (ou « déporter ») une copie de travail qui n'a pas de modifications locales vers une branche différente a pour résultat que la copie de travail a exactement le même aspect que si vous aviez effectué une extraction brute du répertoire. C'est en général plus efficace d'utiliser cette commande, car les différences entre les branches sont souvent minimes. Le serveur n'envoie que le minimum de modifications nécessaire pour faire pointer votre copie de travail vers le répertoire de la branche.
La commande svn switch accepte également
l'option --revision
(-r
),
pour que que vous ne soyez pas obligé de faire pointer
votre copie de travail vers la révision
HEAD
de la branche.
Bien sûr, la plupart des projets sont plus compliqués que
notre exemple calc
et contiennent de
multiples sous-dossiers. Les utilisateurs de Subversion suivent
souvent un algorithme précis quand ils utilisent
des branches :
Copier le « tronc » entier du projet vers une nouvelle branche
Ne déporter qu'une partie de la copie de travail du tronc pour qu'elle pointe sur la branche.
En d'autres termes, si un utilisateur sait que le travail sur la branche ne doit avoir lieu que sur un sous-dossier donné, il utilise svn switch pour ne faire pointer que ce sous-dossier vers la branche (ou parfois des utilisateurs ne vont faire pointer qu'un unique fichier de travail vers la branche !). De cette façon, l'utilisateur peut continuer à recevoir les mises à jour normales du « tronc » vers la plus grande partie de sa copie de travail, mais les portions déportées ne seront pas touchées (à moins que quelqu'un ne propage une modification à sa branche). Cette fonctionnalité ajoute une dimension complètement nouvelle au concept de « copie de travail mixte » : les copies de travail peuvent non seulement contenir un mélange de révisions de travail, mais elles peuvent également contenir un mélange d'emplacements du dépôt.
Si votre copie de travail contient un certain nombre de sous-arborescences pointant vers des emplacements variés du dépôt, elle continue à fonctionner normalement. Quand vous la mettez à jour, vous recevez comme il se doit les correctifs pour chaque sous-arborescence. Quand vous effectuez une propagation, vos modifications locales s'appliquent toujours au dépôt en tant qu'une unique modification atomique.
Remarquez que bien qu'il soit possible pour votre copie de travail de pointer vers une variété d'emplacements du dépôt, ces emplacements doivent tous faire partie du même dépôt. Les dépôts Subversion ne sont pas encore capables de communiquer entre eux ; cette fonctionnalité est prévue à l'avenir [25].
Parce que svn switch est essentiellement une variante de svn update, elle se comporte de la même manière ; toute modification locale présente dans votre copie de travail est préservée lorsque de nouvelles données arrivent en provenance du dépôt.
Astuce | |
---|---|
Vous-êtes vous déjà trouvés dans une situation où vous
effectuez des modifications complexes (dans votre copie de
travail de $ svn copy http://svn.exemple.com/depot/calc/trunk \ http://svn.exemple.com/depot/calc/branches/nouvelle-branche \ -m "Création de la branche 'nouvelle-branche'." Révision 353 propagée. $ svn switch http://svn.exemple.com/depot/calc/branches/nouvelle-branche À la révision 353. La commande svn switch, à l'instar de svn update, préserve vos modifications locales. Désormais, votre copie de travail pointe vers la branche nouvellement créée et la prochaine fois que vous lancerez svn commit vos modifications y seront envoyées. |
[25] Vous pouvez cependant utiliser
svn switch avec l'option
--relocate
si l'URL de votre serveur
change et si vous ne voulez pas abandonner votre copie de
travail existante. Reportez-vous à
svn switch pour des détails
et des exemples.