2010-04-13 3 views
1

checkouts Mon équipe envisage de passer de Clearcase à Subversion et nous envisageons d'organiser le dépôt comme celui-ci:mise en page et dépôt clairsemés

\trunk\project1 
\trunk\project2 
\trunk\project3 

\trunk\staticlib1 
\trunk\staticlib2 
\trunk\staticlib3 

\branches\.. 
\tags\.. 

La question est que nous avons beaucoup de projets (1000+) et chaque projet est une DLL qui lie dans plusieurs bibliothèques statiques communes. Par conséquent, vérifier tout ce qui se trouve dans le coffre est un non-démarrage car il prendra beaucoup trop de temps (~ 2 Go), et est difficile à brancher. L'utilisation de svn: externals pour extraire des dossiers pertinents pour chaque projet ne semble pas idéale, car il en résulte plusieurs copies de travail - une pour le projet et une pour chaque dossier de bibliothèque statique. Nous ne pouvons pas non plus effectuer une validation atomique si les modifications couvrent le projet et certaines bibliothèques statiques.

Les caisses clairsemées semblent très appropriées, car nous pouvons écrire un script pour extraire uniquement les répertoires requis. Cependant, lorsque nous souhaitons fusionner les modifications d'une branche vers le tronc, nous devons d'abord vérifier un tronc complet. Je me demande s'il y a des conseils sur 1) une meilleure organisation du dépôt ou 2) un moyen de fusionner les changements de branchement à une copie de travail de tronc qui est éparse?

+0

Je ne voudrais pas ignorer les externalités aussi rapides. Ils ont aussi l'avantage, que vous pouvez attacher des branches spécifiques/tags des bibliothèques pour des balises spécifiques des projets. Prend un peu de l'enfer hors de reproduire de manière reproductible les anciennes versions. – sbi

+0

L'ancrage Hmm ne nous sera pas très utile car il est courant qu'une tâche de développement ait des modifications impliquant à la fois le projet et plusieurs de ses bibliothèques statiques dépendantes. – Ying

+0

Externals eux-mêmes sont difficiles à étiqueter automatiquement correctement cependant. Si project1 a des externes à la tête de staticlib1, vous ne pouvez pas simplement tagger project1, vous devez aussi mettre staticlib1 dans la même balise (en supposant que external soit relatif), ou l'étiqueter séparément et modifier l'external (en supposant qu'il soit absolu). Si cela est résolu cependant, les externes sont grands. – Eugene

Répondre

3

En ce qui concerne # 2

Même s'il est possible d'effectuer des fusions avec extractions éparses, je ne recommanderais pas cela. Les fusions effectuées dans des copies de travail incomplètes ou superficielles provoquent la création de subtree mergeinfo. Subtree mergeinfo devient une grosse nuisance avec le temps.

Voir: Where Did That Mergeinfo Come From?

Je recommande la fusion toujours de la racine de la branche source à la racine d'une copie complète, propre de la branche cible. Après résolution des conflits et toute autre validation nécessaire est faite, je commettrais alors à partir de la racine de cette copie de travail.

Si vous êtes nouveau sur Subversion, je vous recommande fortement de lire les branches réintégrées, ce qu'est une fusion réflexive et en général comment fonctionne mergeinfo. Le Submerged blog a beaucoup de bonnes informations, tout comme le svn book.