web-dev-qa-db-fra.com

N'y a-t-il pas un problème substantiel avec les balises SVN?

Une pratique courante pour les balises SVN est de marquer des versions différentes afin de pouvoir les trouver facilement plus tard. Si je comprends bien, le marquage est la même chose que la ramification, c'est dans deux cas, cela crée simplement une copie du coffre dans un répertoire séparé (ce serait-il branches/something ou tags/1.2.3), ce qui signifie que:

  • Il n'y a pas d'impact sur la quantité de données stockées par SVN elle-même (à l'exclusion de quelques octets indiquant qu'une étiquette spécifique correspond à une révision spécifique). Si le décharge était de 800 Mo sans la balise, il y aura toujours 800 Mo plus quelques octets avec la nouvelle étiquette.

  • Les fichiers sont dupliqués sur le disque lorsqu'ils sont vérifiés. Un projet qui prend 30 Mo sur disque prendra 60 Mo une fois la balise créée.

Cela signifie que:

  • Une fois que je crée une balise, chaque développeur de mon équipe recevra beaucoup de données de SVN la prochaine fois qu'il sera à jour.

  • Avec des dizaines ou des centaines de tags (comme si c'est généralement le cas lors du marquage de chaque version), les caisses peuvent prendre des heures même pour un petit projet.

N'est-ce pas problématique? Ne pouvait-il pas être mis en œuvre différemment, par exemple à travers svn propedit? Existe-t-il des cas valables où il est logique de vérifier -chaque tag, au lieu d'un seul?


Remarque: comme une personne qui utilise un déploiement continu de manière cohérente, je n'ai jamais utilisé des étiquettes dans la pratique, car chaque commit est potentiellement déployé dans la production s'il passe les tests. Cela signifie que j'ai peut-être manqué quelque chose de fondamental sur les balises ou leurs internes, Et je suis désolé si tel est le cas. Mon intérêt pour les étiquettes découle du fait que j'ai passé les deux dernières heures à vérifier un petit projet tiers qui compte plus de deux cents tags.

7
Arseni Mourzenko

Pourquoi serait-il un problème d'avoir du malle et des succursales? Une balise est juste une autre branche, mais (et peut-être ceci est le bit important) que vous n'avez pas à céder l'ensemble de la répétition de SVN.

Au lieu d'appeler svn co http://repo/ appeler svn co http://repo/trunk Ensuite, si vous voulez voir une succursale particulière, utilisez svn switch.

Tout le monde que je connais qui utilise la configuration de la répétition du coffre/des balises/des branches. Faire cela, ils ne verront jamais les autres branches ou étiquettes à moins d'utiliser le commutateur SVN pour échanger la vue du repo à cette racine.

Ce que vous décrivez, c'est encore plus un problème avec GIT lorsqu'il vérifie tout le repo, puis vous présente une vue en fonction de la seule branche ou à une seule maîtrise. Tous les fichiers sont présents (mais cachés "sous" la vue actuelle ", donc techniquement, SVN est supérieur à GIT à cet égard (c'est-à-dire pouvoir vérifier partiellement une fraction d'un représentant est particulièrement bonne lorsque vous des référentiels multi-gigaoctets).

Vous n'avez pas besoin d'utiliser des tags si vous ne voulez pas, ils ne sont qu'un marqueur dans le repo de toute façon, étant une copie bon marché du coffre que vous avez étiqueté. Vous pouvez, si vous préférez, rappelez-vous du numéro de révision (car il s'agit d'une valeur globalement unique) pour la révision que vous avez marquée, mais il n'ya aucun moyen de marquer un numéro de révision avec un moniker lisible par l'homme.

19
gbjbaanb

Les annuaires de Subversion de Subversion est ce que vous recherchez.

PREMIÈRE CHECTEUR À CAISON, vous devriez exécuter:

svn checkout --depth immediates <URL>

Cela ne fera que vérifier le premier niveau, ainsi que des annuaires que si vous suivez les succursales /, étiquettes /, tronc/convention. Essayez-le; Cela ne téléchargera pas beaucoup.

Puis allez dans les tags /, et courez

svn update --set-depth immediates

Seuls les répertoires représentant les balises apparaissent maintenant.

Changer de 'coffre /' et courir

svn update --set-depth infinity

Tout votre malle/sera vérifié.

Et pour les branches /, vous pouvez sélectionner ceux qui devraient avoir une profondeur à l'infini ou non. Utilisez simplement les commandes appropriées d'en haut contre chaque branche, suivez vos désirs.

7
Hans Deragon