Techniques avancées de subversion, qu'est-ce qui me manque?

10

J'ai commencé à utiliser SVN il y a environ 9 mois et cela a pour le moins changé la donne. Cependant, je sens que je suis encore un peu perdu. J'ai l'impression qu'il y a beaucoup plus dont je dois profiter pour vraiment accélérer le développement de mon application.

Par exemple

J'aimerais pouvoir mettre en quarantaine tous les changements volatils / majeurs dans une sorte de «sous-référentiel» ou quelque chose. Je constate que des changements majeurs empêchent des corrections de bugs mineurs qui sont assez urgentes. Comment puis-je pousser une simple mise à jour sans pousser le code incomplet ou cassé?

Derek Adair
la source
3
Vous voudrez peut-être envisager d'utiliser hg pour vos succursales locales (vous pouvez l'utiliser avec svn très bien, vérifiez ceci )
OneOfOne
Ha! Vous manquez mercurial.
DexterW
3
"Advanced Subversion" sonne comme un oxymore. Utilisez Git ou Mercurial, ne serait-ce que localement.
Macneil

Réponses:

7

Pour répondre à votre exemple, vous avez trois possibilités:

  1. Vous pouvez valider des fichiers uniques. Si vous utilisez un IDE pour accéder au référentiel, il a très probablement une vue, pour sélectionner ou désélectionner des fichiers uniques avant de valider. Sur la ligne de commande, vous tapez svn commit file1 path1/file2 path2pour valider file1, path1 / file2 et chaque modification sous path2.
  2. Vous pouvez faire différentes copies de travail. Vous travaillez sur votre grande fonctionnalité dans votre copie de travail standard et obtenez les informations sur le bug urgent. Vous pouvez extraire votre référentiel dans un répertoire différent et corriger le bogue dans cette deuxième copie de travail. Vous pouvez même extraire uniquement un sous-répertoire avec le composant où le bogue se produit. Après correction de bogue, vous pouvez valider votre deuxième copie de travail sans valider votre travail sur la grande fonctionnalité. EDIT: Cette façon est également décrite dans la réponse d'Anna Lear.
  3. Vous créez une branche pour le travail sur votre fonctionnalité. Pour cela, vous utilisez la commande copy. Si vous utilisez la mise en page standard pour votre référentiel (répertoires avec le projectname et les sous - répertoires avec les noms Trunk, étiquettes et les branches, le tronc contenant le projet) , vous pouvez utiliser le svn-copie-commande comme suit pour créer la branche: svn copy svn://hostname/projectname/trunk svn://hostname/branches/branch-for-feature-X. Vous pouvez maintenant basculer votre copie de travail vers le nouvel emplacement: commutateur svn svn switch svn://hostname/projectname/branches/branch-for-feature-X. Si vous passez en mode de correction de bogues, vous validez vos modifications réelles, remettez votre copie de travail dans le tronc, corrigez le bogue et validez, puis remettez la copie de travail dans votre branche de fonctionnalité. Si vous êtes prêt à développer la fonctionnalité, vous pouvez la fusionner à nouveau dans le coffre.

Pour le cas simple décrit, vous utiliserez généralement le n ° 1 (j'utilise le plus souvent), parfois le n ° 2. Travailler avec des branches (cas # 3) est plus compliqué (en savoir plus ), mais permet plus d'astuces. Mais des branches correspondant à votre description d'un sous-référentiel.

En plus de votre exemple, je ne peux pas dire grand-chose. Il y a beaucoup de choses sur Subversion, mais je ne sais pas ce que vous utilisez déjà et ce dont vous avez besoin pour votre projet. Pour en savoir plus sur SVN, le SVN-Book est une excellente ressource: http://svnbook.red-bean.com/

Mnementh
la source
3
Le problème avec l'approche n ° 1 est que vous ne pouvez pas toujours savoir à l'avance que votre nouvelle fonctionnalité et la correction de bogue ne finiront pas par impliquer des modifications dans les mêmes fichiers. Pour cette raison, je recommanderais # 2 (copie de travail individuelle pour chaque fonctionnalité ou correction de bug) ou # 3 (branche individuelle pour chaque fonctionnalité ou correction de bug). Les branches ont l'avantage que vous pouvez valider des modifications sur une branche avant que la fonctionnalité ou la correction de bogue ne soit terminée sans affecter les extractions du tronc (avec des copies de travail distinctes, toutes les validations affectent le tronc).
Stephen C. Steel
7

Vous pouvez extraire le code dans différents bacs à sable au lieu d'en prendre une seule copie et d'y apporter toutes vos modifications.

Vous pourriez donc avoir une structure de dossiers qui ressemble à ceci:

D:\Dev\MajorFeature1
D:\Dev\Bug12345
D:\Dev\MajorFeature2

etc.

Tous ces éléments peuvent être extraits du même emplacement dans votre SVN, par exemple http://mysvnrepo/trunk.

De cette façon, vous pouvez valider à partir de votre sandbox de correction de bogue sans affecter ceux de développement de fonctionnalités, même si vous devrez exécuter à svn updatepartir d'autres sandbox pour obtenir les modifications validées pour la correction de bogue.

Adam Lear
la source
4

Avez-vous regardé les succursales Subversion ?

Une technique courante consiste à garder votre tronc stable, en appliquant les correctifs critiques nécessaires. Vous créez ensuite une branche pour chaque nouveau travail important. Les développeurs travaillant sur ce projet vérifient la branche et s'engagent dans la branche. Cela n'affecte pas le tronc jusqu'à ce que vous décidiez de fusionner la branche vers le tronc principal dans le cadre de votre intégration finale.

Une autre approche consiste à avoir une branche pour une version particulière, afin d'éviter tout autre travail accidentel sur le tronc causant des problèmes. Vous pouvez corriger les bogues de la 'Release Branch' si nécessaire, puis replier ces correctifs dans le coffre une fois prêt.

Vos développeurs peuvent faire extraire plusieurs copies de travail - le tronc et toutes les branches - ou peuvent permuter entre le tronc et une branche particulière avec la svn switchcommande.

Je ne recommande pas d'avoir beaucoup de copies de travail `` sandbox '' que vous conservez séparément, car (a) cela interdit la collaboration avec les autres et (b) il sera trop facile de commettre accidentellement des modifications qui ne fonctionnent pas encore pour le tronc principal.

JBRWilkinson
la source
3

La taille actuelle de ma copie de travail est de 10 Go, avec plus de 50 000 fichiers. Je peux avoir plusieurs copies pour différentes branches, mais cela prend du temps juste pour créer la nouvelle copie!

Lorsqu'un bogue urgent survient, j'enregistre généralement toutes mes modifications dans un correctif, annule tout, travaille sur le bogue et valide, puis applique le correctif que j'ai enregistré ... Beaucoup plus facile et plus rapide que d'obtenir une nouvelle copie de travail. Si je devais le faire souvent, j'aurais deux copies de travail: une pour les changements à long terme, l'autre pour les corrections de bogues.

Xavier Nodet
la source