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 de sortie), donc vous pouvez à tout moment recréer une certaine construction ou un environnement. Ce processus est connu comme l'étiquetage.
Subversion does not have special commands for branching or tagging, but uses so-called « cheap copies » instead. Cheap copies are similar to hard links in Unix, which means that instead of making a complete copy in the repository, an internal link is created, pointing to a specific tree/revision. As a result branches and tags are very quick to create, and take up almost no extra space in the repository.
Si vous avez importé votre projet avec la structure de répertoire recommandée, créer une version de branche ou d'étiquette est très simple :
Sélectionnez le dossier de votre copie de travail que vous voulez copier dans une branche ou une étiquette, choisissez ensuite la commande → .
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 pour 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 le navigateur 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 :
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.
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.
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'existent pas déjà là-bas.
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 traval 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 commutez.
Appuyez sur pour livrer la nouvelle copie dans le référentiel. N'oubliez pas de fournir un commentaire. Notez que la copie est créée dans le référentiel.
Note that unless you opted to switch your working copy to the newly created branch, creating a Branch or Tag does not affect your working copy. Even if you create the branch from your WC, those changes are committed to the new branch, not to the trunk, so your WC may still be marked as modified with respect to the trunk.
...that is (not really) the question. While a checkout downloads everything from the desired branch in the repository to your working directory, → only transfers the changed data to your working copy. Good for the network load, good for your patience. :-)
To be able to work with your freshly generated branch or tag you have several ways to handle it. You can:
→ 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 → 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 . 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).
If you want to work on trunk and branch, but don't want the expense of a fresh checkout, you can use Windows Explorer to make a copy of your trunk checkout in another folder, then → that copy to your new branch.
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 créer un instantané statique du projet à une étape particulière. Comme tels, ils ne sont normalement pas utilisés pour le développement - c'est à cela que servent les 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 parce que vos fichiers locaux ne sont pas protégés en écriture, il n'y a rien pour vous empêcher de faire cela par erreur. 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 devez faire de nouveaux changements à une sortie 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 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 vont sur la nouvelle branche et pas sur le tronc. Seules les modifications sont stockées. Le reste reste une copie peu coûteuse.