Brancher / Étiqueter

La capacité d'isoler des changements sur une ligne de développement séparée est une des fonctionnalités des systèmes de contrôle de version. Cette ligne est connue comme une branche. Les branches sont souvent utilisées pour expérimenter de nouvelles fonctionnalités sans déranger la ligne de développement principale avec des erreurs de compilation et des bugs. Dès que la nouvelle fonction est assez stable alors la branche de développement est fusionnée vers la branche principale (le tronc).

Une autre fonctionnalité des systèmes de contrôle de version est la capacité de marquer des révisions particulières (par exemple une version déployée), donc vous pouvez à tout moment recréer une certaine version de votre application ou un environnement. Ce processus est connu comme l'étiquetage.

Subversion n'a pas de commandes spéciales pour créer des branches ou des étiquettes, mais utilise de prétendues copies bon marché à la place. Les copies bon marché sont semblables aux hard links d'Unix, ce qui signifie qu'au lieu de faire une copie complète dans le référentiel, un lien interne est créé, pointant vers un arbre/révision spécifique. En conséquence, branches et étiquettes sont très rapides à créer et ne prennent presque aucun espace supplémentaire dans le référentiel.

Créer une branche ou une étiquette

Si vous avez importé votre projet avec la structure de répertoire recommandée, créer une branche ou une étiquette est très simple :

Figure 4.33. La boîte de dialogue Branche/Etiquette

La boîte de dialogue Branche/Etiquette


Sélectionnez le dossier de votre copie de travail que vous voulez copier dans une branche ou une étiquette, choisissez ensuite la commande TortoiseSVNBranche/Étiquette....

L'URL de destination par défaut de la nouvelle branche sera l'URL source sur laquelle votre copie de travail est basée. Vous devrez éditer cette URL vers le nouveau chemin de votre branche/étiquette. Ainsi au lieu de

    http://svn.collab.net/repos/ProjectName/trunk

vous pourriez maintenant utiliser quelque chose comme

    http://svn.collab.net/repos/ProjectName/tags/Release_1.10

Si vous ne pouvez pas vous rappeler la convention de nommage que vous avez utilisée la dernière fois, cliquer sur le bouton à droite pour ouvrir l'explorateur de référentiel pour voir la structure du référentiel existante.

Maintenant vous devez choisir la source de la copie. Ici vous avez trois options :

Révision HEAD dans le référentiel

La nouvelle branche est copiée directement dans le référentiel de la révision HEAD. Aucune donnée n'a besoin d'être transférée depuis votre copie de travail et la branche est créée très rapidement.

Révision spécifique dans le référentiel

La nouvelle branche est copiée directement dans le référentiel mais vous pouvez choisir une révision plus vieille. C'est utile si vous avez oublié de faire une étiquette quand vous avez sorti votre projet la semaine dernière. Si vous ne pouvez pas vous rappeler le numéro de révision, cliquez sur le bouton à droite pour afficher le journal de révision et choisir le numéro de révision de là. Là encore, aucune donnée n'est transférée de votre copie de travail et la branche est créée très rapidement.

Copie de travail

La nouvelle branche est une copie identique à votre copie de travail locale. Si vous avez mis à jour quelques fichiers à une révision plus ancienne dans votre CdT, ou si vous avez fait des changements locaux, c'est exactement ceux-ci qui vont dans la copie. Naturellement cette sorte d'étiquette complexe peut impliquer des transferts de données de votre CdT vers le référentiel si elles n'y existent pas déjà.

Si vous voulez que votre copie de travail soit basculée automatiquement sur la branche nouvellement créée, utilisez la case à cocher Déplacer la copie de travail vers une nouvelle branche/étiquette. Mais si vous le faites, assurez-vous d'abord que votre copie de travail ne contient pas de modifications. Si c'est le cas, ces changements seront fusionnés dans la CdT de branche quand vous basculerez.

Appuyez sur OK pour livrer la nouvelle copie dans le référentiel. N'oubliez pas de mettre un commentaire. Notez que la copie est créée dans le référentiel.

Notez qu'à moins que vous choisissiez de basculer votre copie de travail vers la branche juste créée, créer une branche ou une étiquette ne modifie pas votre copie de travail. Même si vous créez la branche depuis votre CdT, ces changements sont livrés dans la nouvelle branche, pas dans le tronc, donc votre CdT peut toujours être marquée comme modifiée sans altérer le tronc.

Autres manières de créer une branche ou une étiquette

Vous pouvez aussi créer une branche ou une étiquette sans avoir de copie de travail. Pour ce faire, ouvrez l'explorateur de référentiel. Vous pouvez glisser/déplacer des répertoires à un nouvel endroit. Vous devez appuyer sur Ctrl lorsque vous faites glisser la répertoire pour créer une copie, sinon celui ci est déplacé, pas copié.

Vous pouvez également faire glisser un répertoire avec le bouton droit de la souris. Dès que vous relâchez le bouton, un menu contextuel s'affiche vous permettant de choisir entre la copie ou le déplacement. Bien sûr, pour créer une branche ou une étiquette vous devez le copier, pas le déplacer.

Il y a encore une autre méthode en passant par la fenêtre des commentaires. Vous pouvez afficher le tronc par exemple, sélectionner une révision (la tête ou une plus ancienne), faire un click droit et choisir Créer une branche/étiquette depuis la révision...

Extraire ou aller sur...

... telle (n')est (pas) la question. Tandis qu'une extraction extraie tout de la branche désirée dans votre répertoire de travail, TortoiseSVNAller sur... transfère seulement les données changées dans votre copie de travail. Bon pour la charge réseau, bon pour votre patience. :-)

Pour pouvoir travailler avec votre branche ou votre tag récemments générés, vous avez plusieurs méthodes. Vous pouvez :

  • TortoiseSVNExtraire pour faire une extraction récente dans un dossier vide. Vous pouvez extraire à n'importe quel emplacement sur votre disque local et vous pouvez créer autant de copies de travail de votre référentiel que vous souhaitez.

  • Basculez votre copie de travail courante vers la copie nouvellement créée dans le référentiel. Choisissez de nouveau le dossier de niveau supérieur de votre projet et utilisez TortoiseSVNAller sur... du menu contextuel.

    Dans la boîte de dialogue suivante, entrez l'URL de la branche que vous venez juste de créer. Choisissez le bouton radio Révsion HEAD et cliquez sur OK. Votre copie de travail est basculée vers la nouvelle branche/étiquette.

    Aller sur... fonctionne comme Mettre à jour dans le sens où il ne se débarrasse jamais de vos changements locaux. Les changements que vous avez faits à votre copie de travail qui n'ont pas encore été livrés seront fusionnés quand vous faites Aller sur. Si vous ne voulez pas que cela arrive alors vous devez ou livrer les changements avant la bascule, ou faire revenir votre copie de travail à une révision déjà livrée (typiquement HEAD).

  • Si vous voulez travailler sur le tronc et une branche, mais sans faire une extraction, vous pouvez utiliser Windows Explorer pour copier votre extraction du tronc dans un autre répertoire, puis utilisez la commande TortoiseSVNAller sur... sur cette copie pour en faire la branche.

Figure 4.34. La boîte de dialogue Aller sur

La boîte de dialogue Aller sur


Bien que Subversion lui-même ne fasse aucune distinction entre les étiquettes et les branches, la manière dont elles sont typiquement utilisées diffère un peu.

  • Les étiquettes sont typiquement utilisées pour garder un état figé du projet à une étape particulière. Ils ne sont normalement pas utilisés comme tel pour le développement - contrairement aux branches, c'est la raison pour laquelle nous avons recommandé la structure de référentiel /trunk /branches /tags en premier lieu. Travailler sur une révision d'étiquette n'est pas une bonne idée, mais dans la mesure où vos fichiers locaux ne sont pas protégés en écriture, il n'y a rien pour vous en empêcher. Cependant, si vous essayez de livrer vers un chemin dans le référentiel qui contient /tags/, TortoiseSVN vous avertira.

  • Il peut arriver que vous deviez faire de nouveaux changements à une version déployée que vous avez déjà étiquetée. La façon correcte de le gérer est de créer d'abord une nouvelle branche à partir de l'étiquette et de livrer cette branche. Faites vos changements sur cette branche et créez ensuite une nouvelle étiquette depuis cette nouvelle branche, par exemple Version_1.0.1.

  • Si vous modifiez une copie de travail créée à partir d'une branche et livrez, alors tous les changements seront luvrés sur la nouvelle branche et pas sur le tronc. Seules les modifications sont stockées. Le reste reste une copie peu coûteuse.