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 dépôt, 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 dépôt.

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.53. 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....

The default destination URL for the new branch will be the source URL on which your working copy is based. You will need to edit that URL to the new path for your branch/tag. So instead of

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

you might now use something like

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

If you can't remember the naming convention you used last time, click the button on the right to open the repository browser so you can view the existing repository structure.

Dossiers intermédiaires

When you specify the target URL, all the folders up to the last one must already exist or you will get an error message. In the above example, the URL http://svn.collab.net/repos/ProjectName/tags/ must exist to create the Release_1.10 tag.

However if you want to create a branch/tag to an URL that has intermediate folders that don't exist yet you can check the option Create intermediate folders at the bottom of the dialog. If that option is activated, all intermediate folders are automatically created.

Note that this option is disabled by default to avoid typos. For example, if you typed the target URL as http://svn.collab.net/repos/ProjectName/Tags/Release_1.10 instead of http://svn.collab.net/repos/ProjectName/tags/Release_1.10, you would get an error with the option disabled, but with the option enabled a folder Tags would be automatically created, and you would end up with a folder Tags and a folder tags.

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

Révision HEAD dans le dépôt

La nouvelle branche est copiée directement dans le dépôt 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 dépôt

La nouvelle branche est copiée directement dans le dépôt 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 dépôt 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.

Si votre copie de travail contient d'autres projets incluant des propriétés svn:externals, ces ressources externes seront énumérées au bas de la fenêtre de branche/étiquette. Pour chaque ressource externe, le chemin cible et l'URL source sont affichés.

If you want to make sure that the new tag always is in a consistent state, check all the externals to have their revisions pinned. If you don't check the externals and those externals point to a HEAD revision which might change in the future, checking out the new tag will check out that HEAD revision of the external and your tag might not compile anymore. So it's always a good idea to set the externals to an explicit revision when creating a tag.

Les éléments externes sont automatiquement épinglé soit à la révision courante de tête soit à la révision de travail de base, selon la source de la branche/tag :

Tableau 4.1. Révision épinglé

Copier la sourceRévision épinglé
Révision HEAD dans le dépôtrévision de tête HEAD du repository externe
Révision spécifique dans le dépôtrévision de tête HEAD du repository externe
Copie de travailrévision CdT externe


externes avec externes

Si un projet qui est inclus comme un élément externe a lui-même, alors ils ne seront pas marqués! Seuls les éléments externes qui sont les enfants directs peuvent être marqués.

Appuyez sur OK pour livrer la nouvelle copie dans le dépôt. N'oubliez pas de mettre un commentaire. Notez que la copie est créée dans le dépôt.

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 dépôt. 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.

Une autre façon provient des journaux. Vous pouvez afficher les journaux par exemple tronc, sélectionnez une révision (soit la révision de tête principale soit une révision antérieure), clic droit et choisissez

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 dépôt que vous souhaitez.

  • Basculez votre copie de travail courante vers la copie nouvellement créée dans le dépôt. 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.54. 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 dépôt /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 dépôt 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.