2010-05-21 20 views
1

J'utilise Tortoise SVN pour gérer un projet. Évidemment, les principes entourant le marquage s'appliquent à toute implémentation de SVN mais dans cette question, je ferai référence à certaines boîtes de dialogue et messages spécifiques à TortoiseSVN.Marquage dans Subversion - comment puis-je prendre la décision de continuer à travailler sur mon tronc par rapport au nouveau tag?


Mon répertoire de travail et la structure de dépôt subversion ont tous deux un répertoire racine de la source et le tronc, les balises et les répertoires de branches en dessous. (Je ne pouvais pas comprendre comment faire une hiérarchie indentée à plusieurs niveaux dans markdown sans utiliser de puces, donc si quelqu'un pourrait éditer et corriger cela, je l'apprécierais.)

Je travaille dans le répertoire Trunk dans mon copie de travail et il pointe sur le répertoire Trunk dans le repo. Je veux appliquer une balise "Release1" de sorte que je clique sur l'option de menu "Branch/tag ..." et que je place le chemin repo comme ma balise [repo_path/bla/Source/Tags/Release1 "Cette boîte de dialogue me donne l'option Je reconnais que si cette option n'est pas cochée, la nouvelle branche "Release1" sous/Tags "sera créée mais ma copie de travail restera sur la précédente" Tronc "chemin". Si je coche cette option (ou utilise la commande Switch), je comprends que ma copie de travail passera à la nouvelle branche "Release1" sous "/ Tags". Là où il me manque un concept, c'est comment prendre cette décision. Il ne semble pas que je veuille changer mon répertoire de travail pour le tag récemment créé car par définition (?) Je veux que ce tag soit un instantané de mon code à un moment donné. Si je ne change pas le répertoire de travail, je continuerai à travailler à partir de Trunk et quand je serai prêt à prendre un autre snapshot, je ferai un autre tag. Et ainsi de suite ...

Est-ce que je comprends bien ce droit ou est-ce que j'indique quelque chose de mal dans le paragraphe précédent (par exemple la déclaration de ne pas vouloir passer au tag puisque le tag devrait représenter un instantané) manque quelque chose concernant la façon de prendre cette décision?

Répondre

3

Dans Subversion, une balise n'est pas un "label" que vous mettez dans une révision; c'est une copie de tronc (ou une branche ou autre) à un moment donné. Étant juste un répertoire copié, vous pourrait s'engager à elle; mais vous ne devrait pas.

Une fois que vous faites une étiquette, vous devriez rester où vous étiez (une branche ou un tronc) et y travailler, ne passez pas au répertoire des étiquettes. Si vous vous engagez dans un répertoire de tag, vous en modifierez le contenu, et ce n'est plus utile en tant que "snapshot". Lorsque vous créez une branche, vous souhaiterez généralement passer à cette branche, mais il se peut que vous souhaitiez rester dans le coffre après la création de la branche (par exemple, si vous remarquez par inadvertance qu'il y a un correctif à faire dans le tronc) AU PLUS VITE); c'est ta décision. Vous pouvez toujours changer plus tard à tout moment. Lorsque vous créez une étiquette, il n'y a pas beaucoup de décision à prendre; reste dans la branche que tu es. Je ne peux penser à aucun cas où le passage à l'étiquette serait utile ...

+0

@Nicholas - Mais la mise en œuvre de SVN des « étiquettes » est par mots clés droite? Et la façon dont les balises sont implémentées est de faire une copie de ce que le répertoire courant est au nouveau répertoire de balises. Mais étant donné cela, je suppose que le balisage * est * la bonne façon pour moi d'obtenir l'instantané ponctuel que je veux, n'est-ce pas? Enfin, dans quels cas quelqu'un voudrait-il passer au répertoire de balises nouvellement créé, si (au moins un des) objectif (s) est de prendre un instantané? – Howiecamp

+0

SVN n'a pas de concept de "labels" que je connais, ne sais pas de quoi vous parlez. // Oui, le balisage est la méthode appropriée pour effectuer l'instantané à un instant donné. // Je ne sais pas pourquoi quelqu'un voudrait passer à la balise nouvellement créée, mais si vous le faites, ne vous engagez pas (techniquement possible, généralement indésirable). Passer à une balise longtemps après sa création est cependant courant pour obtenir le code de cette image instantanée (généralement une version versionnée). –

+0

Gotcha donc essentiellement je continue à travailler sur Trunk. Se mettre d'accord? En ce qui concerne SVN qui n'a pas de concept d'étiquettes, je pense que nous disons la même chose. Ce qu'on appelle des «étiquettes» dans d'autres outils de contrôle de source s'appelle des étiquettes dans SVN. Mis en œuvre différemment mais utilisé pour obtenir le même effet. – Howiecamp

1

Dans Subversion, techniquement, il n'y a pas de "branche" ou de "tag". Pour SVN, ils sont juste des copies d'un répertoire. Ils sont seulement spéciaux en raison de la façon dont vous les traiter. Tag = faire une copie d'un projet, mais ne le touchez pas après avoir fait une copie. Vous ne voulez généralement pas passer à la balise, car vous (normalement) n'y apporterez aucune modification. Branche = faire une copie d'un projet, et y faire un peu de travail.Généralement le travail que vous faites dans une branche est fusionné avec le tronc à un moment donné. Si vous faites immédiatement une branche, vous voudrez probablement passer à la branche (cochez la case). Bien que SVN lui-même n'ait aucun traitement spécial pour les tronc/branches/étiquettes, TortoiseSVN a un indice d'interface utilisateur pour décourager l'utilisation d'une étiquette. Si vous extrayez une balise (ou faites une balise et passez à celle-ci), faites du travail, puis essayez de valider, TSVN affichera un message d'avertissement. TSVN essaie de deviner ce que vous essayez vraiment de faire.

REMARQUE # 2: Vous n'avez pas nécessairement besoin d'une balise pour un instantané à un moment précis. Le numéro de révision du repo fait cela pour vous.

0

Faisons est plus simple:

façon de créer la structure de votre projet:

  • svnRoot/projectName/trunk (ligne de développement réel)
  • svnRoot/PROJECTNAME/tags/Release_X.XX (penser dans les étiquettes comme étiquette mais ce ne sont que des copies)
  • svnRoot/projectName/branches/Release_X.XX (copie qui peut être mise à jour, une branche un sous-projet)

Ne jamais commettre plus de tag (vous pouvez, mais vous ne devriez pas).

Si vous avez besoin de développer somenthing sans détruire le travail de quelqu'un d'autre, créer une branche, puis fusionner votre branche avec le tronc, mais prendre soin :)

+0

Si vous venez de commencer tout le monde dit est fortement recommandé essayer GIT! – MadMad666