2009-12-23 4 views
5

Dans notre société, nous travaillons sur un produit composé de différents modules C/C++. Idéalement, chaque niveau et chaque module devrait être développé séparément par différentes équipes et testé de manière indépendante. , Nous avons chaque module séparé dans sa propre branche: \svn: externals & tagging, comment combiner le code entre équipes

Les modules sont les suivants:

 
\hid 
    \branches 
    \tags 
    \trunk 
\api 
    \branches 
    \tags 
    \trunk 
\ui 
    \branches 
    \tags 
    \trunk 

Par ailleurs, la sortie du produit est construit en combinant les modules et compilé en utilisant régulièrement un système de CI.

 
\productX 
    \branches 
    \5.0 
     \hid-4.0 (svn:externs \hid\branches\4.0) 
     \api-3.0 (svn:externs \api\branches\3.0) 
     \ui-5.0 (svn:externs \ui\branches\5.0) 
    \tags 
    \trunk 

Le problème principal que nous avons est le comportement de 'svn tag' en association avec externs. Les externs actuels se réfèrent à la HEAD - parce que nous aimerions construire la dernière version régulièrement pour assurer que tous les modules fonctionnent ensemble. Cependant, une fois qu'une build est réussie et que nous procédons à une version, ce serait bien s'il y avait un moyen facile d'étiqueter automatiquement tout - y compris la version utilisée dans l'extern. Dans l'état actuel des choses, nous devons créer des tags pour les modules, puis mettre à jour les externs vers ces tags, puis marquer le produit et enfin l'échanger vers le tronc.

Y a-t-il une façon plus propre de faire cela? N'hésitez pas à commenter également la structure actuelle.

Répondre

3

Je pense qu'il vaudrait mieux que vos définitions externes se réfèrent aux étiquettes des modules plutôt qu'à leurs lignes réseau. De cette façon, vous n'aurez besoin que de connaître les jalons connus des modules, et rien ne devra changer lorsque vous marquerez le produit de base. Ceci est conforme à la meilleure pratique (suggérée dans la documentation SVN) de n'utiliser que des révisions explicites (plutôt que HEAD) dans svn:externals.

+1

Merci Michael. Vos commentaires reflètent ce que j'ai lu (beaucoup!) Sur les pratiques SVN svn: externs. Nous faisons principalement ce qui a été suggéré: * la plupart du temps, le produit se réfère aux branches des modules * avant une version, nous créons une étiquette pour chaque module * ensuite, nous mettons à jour les externes pour les pointer vers ces tags * enfin, nous marquons le produit * puis nous changeons de nouveau les externes vers les branches Cela fonctionne, mais il est très fastidieux et sujet aux erreurs. J'espérais qu'il y a un meilleur moyen ... – Charles