Question

Il est un mois que je suis en train de trouver la meilleure solution à mon problème et c'est le meilleur. Je voudrais savoir si vous êtes d'accord avec elle.

Nous développons un ensemble d'applications Web interconnectés. Nous traitons chaque application comme indépendente unique solution des autres. Chaque demande est formée par différents projets, mais ce doens't beaucoup d'importance.

Nous utilisons pour développer les nouvelles fonctionnalités du tronc. Chaque fois que nous publions tag live, nous quelque chose de la version du tronc avec un nom de version. Par exemple, supposons que la première version du tronc est étiquetée 1.0.0. Lorsque nous développons la mise en œuvre furhter (à savoir que nous travaillons sur 1.1.0) une série de bug sort de la version de production. Ce que nous pensons à faire est étiquette de caisse et corriger des bugs 1.0.0 vers la version 1.0.1.

Maintenant, ce que nous voudrions accomplir est de marquer chaque version de révision. Autrement dit, nous voudrions être en mesure d'avoir une copie de travail parfaite de 1.0.0, 1.0.1, 1.0.2 ...

Maintenant, voici ma solution, je voudrais savoir si vous êtes d'accord là-dessus.

  1. Je ma version étiquetée extrais par checkout 1.0.0 dans le dossier local / balises
  2. Je ramifier cette version dans le dossier référentiel /branches/1.0.1
  3. Je nouvelle branche Voir mon dans le dossier local / branches
  4. Je corrige des bugs sur la branche 1.0.1
  5. Lorsque, après x commits, tout est ok, je baliser cette nouvelle version à la /tags/1.0.1

et ainsi de suite pour chaque nouveau bug / nouvelle version. Je l'ai essayé et si j'extraira le dossier / balises je peux voir toutes les versions, perfectyl de travail.

Maintenant quand je suis prêt à la 1.1.0 je fusionner la dernière balise (ou branche, ils devraient être le même à la fin si tout est correct) sur le tronc à l'aide « Fusionner une plage de révisions » options. Quand tout est fusionné, je devrais avoir une version 1.1.0 de travailler pleinement avec les révisions corrigées dans le passé. Compile, test, puis publier et, évidemment, étiquette à dossier /tags/1.1.0 sur le serveur.

Que pensez-vous? Merci, Marco

Était-ce utile?

La solution

Normalement, tout le développement se fait sur le tronc et le tronc est ce que vous basez rejets hors. Vous utilisez des branches soit pour stabiliser le code en préparation pour une sortie, pour patcher une version ou pour implémenter une fonctionnalité qui ne peut être développé sur le tronc pour plusieurs raisons.

Lorsque vous utilisez la branche pour la stabilisation ou patcher un communiqué, le correctif pour le bug, ou les changements qui devraient aller à la branche de stabilisation sont tous les pays développés sur le tronc, et a fusionné de manière sélective à la branche.

Lorsque vous utilisez une branche de fonction, vous vous engagez à la branche, puis fusionner avec le tronc (et peut-être de là à la stabilisation / branches patch.

Courte histoire, je manque le tronc dans votre cycle de développement, et je me demande comment vous assurer que tous les changements sont finalement dans le coffre, parce que ce où votre prochaine version majeure sera fonction / devrait commencer.

Autres conseils

Cela ressemble à un processus assez de bon, sauf que vos corrections de bugs sur les branches de production seront, selon toute vraisemblance, doivent se refléter dans le coffre aussi. Par conséquent, il ne devrait pas être nécessaire de fusionner tout dans le tronc à la fin parce que vous aurez déjà fait que vous êtes allé.

Dans le cas contraire, il ne semble que vous utilisez correctement les branches et les balises, donc félicitations à ce sujet. Je l'ai vu beaucoup trop de projets qui ne pouvaient pas identifier dans le contrôle de la source du courant (ou une autre) version de production (qui, si vous avez besoin de réparer quelque chose ou à l'arrière du rouleau, il est essentiel). Il n'y a aucune excuse pour cela, à mon avis.

Qu'est-ce que vous avez décrit des sons comme la procédure normale pour le marquage et la ramification pour moi. C'est la façon dont j'utilise la subversion, et il fonctionne très bien.

Ca me semble bien.

En fonction du ammount des corrections d'être libérés, je ne voudrais pas déranger avec des branches createting pour chaque nouvelle version mineure. Création ceux-ci, communiquer aux gens ce à la caisse / où checkin, la fusion vers le bas, etc. Rincer et répéter.

Avoir une branche pour chaque version majeure et l'utilisation que comme un « entretien » -branch fonctionne bien pour nous.

Voici une description du processus dans le cas où vous êtes intéressé: svn stratégies de déploiement pour plusieurs groupes de développeurs (pas co-localisés) travaillant sur différents composants d'un même projet

Définir des politiques de branches et de créer une nouvelle branche que si vous avez à faire quelque chose qui ne rentre pas dans les politiques actuelles. Aide à limiter la ramification.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top