Question

Quand j'ai commencé à utiliser des systèmes de contrôle de révision comme CVS et SVN, je n'ai pas trop compris les notions de "tronc", de branchement, de fusion et de marquage.Je commence maintenant à comprendre ces concepts et à vraiment comprendre leur importance et leur pouvoir.

Donc, je commence à le faire correctement.Ou alors je pense...Voilà ce que j'ai compris jusqu'à présent :La dernière version/version stable de votre code doit se trouver dans /trunk/ tandis que les versions bêta ou les versions de pointe se trouvent dans le répertoire /branches/ en tant que répertoires différents pour chaque version bêta, puis fusionnées dans le tronc lorsque vous publiez.

Est-ce une vision trop simpliste des choses ?Quelles configurations de référentiel recommandez-vous ?Si cela fait une différence, j'utilise Subversion.

Était-ce utile?

La solution

Voir ces deux questions sur SO pour plus d'informations :

Autres conseils

Ce que je fais et considère normalement comme une norme est :

Le tronc doit contenir votre ligne principale de développement, votre version instable.Vous devez créer des branches de version pour vos versions.

Quelque chose comme:

/trunk (ici vous êtes en train de développer la version 2.0) /branches/RB-1.0 (il s’agit de la branche de version 1.0) /branches/RB-1.5

Lorsque vous trouvez un bug dans la version 1.5, vous le corrigez dans la branche RB puis vous fusionnez avec le tronc.

Je recommande également ce livre.

Eric propose une excellente série d'articles sur l'utilisation du contrôle de code source et les meilleures pratiques organisationnelles.Le chapitre 7 traite des succursales (et oui, il recommande les répertoires /trunk/ et /branches/ que vous suggérez).

J'utilise Perforce depuis longtemps et mes commentaires sont peut-être un peu centrés sur Perforce, mais les principes de base s'appliquent à tout logiciel SCM doté de branchements à moitié décents.Je crois fermement à l'utilisation de pratiques de développement ramifiées.J'ai un "principal" (alias "mainline") qui représente la base de code d'aujourd'hui jusqu'à l'éternité.L'objectif est que ce soit, la plupart du temps, stable et, si les choses se présentent, vous pouvez supprimer à tout moment une version qui refléterait la fonctionnalité actuelle du système.Ces satanés vendeurs n'arrêtent pas de demander...

Les développements se produisent dans des branches qui sont dérivées de MAIN (normalement - parfois, vous souhaiterez peut-être créer une branche à partir d'une branche de développement existante).Intégrez MAIN à vos branches de développement aussi souvent que possible, pour éviter que les choses ne divergent trop - ou vous pouvez simplement prévoir une période d'intégration plus longue plus tard.N'intégrez votre nouvelle fonctionnalité géniale à MAIN que lorsque vous êtes sûr qu'elle sortira dans une prochaine version.

Enfin, vous disposez d'une ligne RELEASE, qui offre la possibilité de différentes branches pour différentes versions.Il existe plusieurs choix en fonction des capacités d'étiquetage de votre logiciel SCM et des différences probables entre les révisions majeures et mineures.Vous pouvez donc opter, par exemple, pour une branche de version pour chaque version intermédiaire, ou uniquement pour un numéro de version majeur.Votre kilométrage peut varier.

Généralement, branchez depuis MAIN pour publier le plus tard possible.Les corrections de bugs et les modifications de dernière minute peuvent soit être transférées directement dans RELEASE pour une intégration ultérieure dans MAIN, soit dans MAIN pour une sauvegarde d'intégration immédiate.Il n’y a pas de règle absolue : faites ce qui fonctionne le mieux.Si toutefois vous avez des modifications qui peuvent être soumises à MAIN (par ex.depuis une branche de développement, ou des "petits ajustements" par quelqu'un sur MAIN), puis effectuez la première.Cela dépend de la façon dont votre équipe travaille, de vos cycles de publication, etc.

Par exemple.J'aurais quelque chose comme ça :

//MYPROJECT/MAIN/... - the top level folder for a complete build of all the product in main.
//MYPROJECT/DEV/ArseKickingFeature/... - a branch from MAIN where developers work.
//MYPROJECT/RELEASE/1.0/...
//MYPROJECT/RELEASE/2.0/...

Un projet non trivial aura probablement un certain nombre de branches DEV actives à la fois.Lorsqu'un développement a été intégré dans MAIN afin qu'il fasse désormais partie du projet principal, supprimez l'ancienne branche DEV dès que possible.De nombreux ingénieurs traiteront une branche DEV comme leur propre espace personnel et la réutiliseront pour différentes fonctionnalités au fil du temps.Découragez cela.

Si, après la publication, vous devez corriger un bug, faites-le dans la branche de publication correspondante.Si le bogue a déjà été corrigé dans MAIN, intégrez-le, à moins que le code n'ait tellement changé dans MAIN, le correctif est différent.

Ce qui différencie réellement les lignes de code, ce sont les politiques que vous utilisez pour les gérer.Par exemple, quels tests sont exécutés, qui examine avant/après une modification, quelle action se produit en cas de panne d'une build.Généralement, les politiques - et donc les frais généraux - sont les plus fortes dans les branches de version et les plus faibles dans DEV.Il y a un article ici qui passe en revue certains scénarios et des liens vers d'autres choses utiles.

Enfin, je recommande d'opter pour une structure simple pour commencer, et d'introduire uniquement celles de développement et de version supplémentaires si nécessaire.

J'espère que cela aide et ne dit pas trop l'évidence.

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