web-dev-qa-db-fra.com

Quelle est la différence entre un tag et une branche dans SVN?

Je travaille avec SVN Branches et TRUNK depuis des années, mais jamais avec des TAG

Quelqu'un peut-il conseiller quelle est la principale différence entre ceux-ci? Quel est l'objectif principal du balisage?

55
Maciej

Cela vient de http://svnbook.red-bean.com/en/1.5/svn.branchmerge.tags.html

Mais attendez un instant: cette procédure de création de balises n'est-elle pas la même que celle utilisée pour créer une branche? Oui, en fait, ça l'est. Dans Subversion, il n'y a pas de différence entre une balise et une branche. Les deux ne sont que des répertoires ordinaires créés par copie. Tout comme avec les branches, la seule raison pour laquelle un répertoire copié est un "tag" est parce que les humains ont décidé de le traiter de cette façon : tant que personne ne l'a jamais valide dans le répertoire, il reste pour toujours un instantané. Si les gens commencent à s'y engager, cela devient une branche.

Techniquement, c'est la même chose qu'une branche, mais conceptuellement, nous la prenons comme un instantané. Dans mes référentiels svn, je sais que les branches incluront de grandes fonctionnalités qui peuvent ou non avoir été fusionnées dans le tronc, mais j'utilise des balises pour marquer uniquement les versions.

65
Jonathon Bolster

La seule différence est que vous les utilisez, ce sont les mêmes.

Une branche est l'endroit où vous pouvez développer du travail sur une version différente du code du tronc principal.

Un tag est utilisé pour "taguer" une version. Disons que je travaille uniquement sur le coffre. Lorsque j'envoie V1 à un client, je crée un "V1 Tag" pour lui. Ensuite, je travaille sur V2. Lorsque le client a un problème avec V1, je peux simplement retirer la balise et commencer à déboguer le problème sur la même version exacte que le client. Vous pouvez vérifier dans une balise, mais vous êtes pas censé. Si vous devez faire une version V1.1, vous créez une branche à partir de la même version que la balise V1, vérifiez les correctifs et étiquetez-la lorsqu'elle est publiée en tant que V1.1.

24
DaveShaw

"Trunk" et "Branches" sont généralement utilisés pour le développement actif et actuel. C'est là que les utilisateurs valident/retirent les fichiers. C'est généralement là où il y a beaucoup d'activité.

D'un autre côté, les "Tags" sont généralement utilisés pour créer un instantané et un jalon de votre développement. Il n'est pas vraiment idéal pour votre équipe de faire un commit/checkout sur les dossiers Tag.

Voici deux exemples de l'applicabilité des balises:

  1. Archivage des branches - Lorsqu'une branche de version ou de fonctionnalité est terminée ou complètement supprimée, vous supprimez généralement la branche, ce qui la masque efficacement de la révision HEAD. Certaines personnes ne les suppriment généralement pas dossiers pour l'archivage comme ils préféreraient voir toutes leurs versions/projets. Cela peut cependant rendre difficile la navigation dans l'arborescence. C'est pourquoi il est préférable de ne conserver que les versions et fonctionnalités de projet actives et en cours d'exécution dans le HEAD reivision du dossier branches. Vous pouvez créer une copie Tag de la dernière révision de ces branches archivées afin que vous puissiez toujours les voir dans la révision HEAD. De cette façon, vous pouvez avoir instantané rapide de la dernière révision de la branche avant que la branche ne soit archivée et aussi garder les choses dans l'arbre des branches bien rangé.

  2. Garder les jalons - Les projets ont généralement plusieurs phases de développement. Dev, UT, QA, pré-QA, post-QA, BAT, post-BAT, PROD, pré-PROD, post-PROD. Vous pouvez utiliser des balises pour créer un instantané de votre développement à chaque étape importante au lieu de vous fier aux numéros de révision, aux dates ou aux commentaires.

Les balises peuvent être d'une grande aide pour organiser les choses, mais peuvent aussi être chaotiques. Il est important d'avoir une convention de dénomination standard pour nommer les dossiers de balises.

8
ianstigator

Les balises et les branches sont techniquement équivalentes. La différence réside dans la façon dont ils sont généralement utilisés.

Vous utilisez des branches pour créer une copie modifiable du code afin de pouvoir développer simultanément une copie stable et une copie de travail.

Vous utilisez des balises pour créer une copie en lecture seule du code afin de pouvoir facilement obtenir ce code plus tard. Voici comment cela est utilisé avec les versions quotidiennes. Chaque build quotidien crée simplement une balise avec un nom contenant ce numéro de build. Une fois que vous aurez besoin d'obtenir les sources de cette compilation il y a longtemps (par exemple, pour reproduire un bogue), vous les exportez simplement à partir de cette balise.

2
sharptooth