2011-01-28 3 views
0

J'ai actuellement la configuration suivante dans mon-dépôt SVN:Subversion fusion dans le tronc balise existante

-Root 
--ProjectA 
----trunk 
----tags 
----branches 
--ProjectB 
----trunk 
----tags 
----branches 
--ProjectPool 
----projectA 
----projectB 

Où ProjectPool contient des balises spécifiques de ProjectA et ProjectB.

Maintenant, les balises dans ProjectPool changent de temps en temps. Cela signifie qu'une version de trunk spécifique de ProjectA est validée et que je veux créer une copie à partir de cette révision dans Root/ProjectPool/projectA. La nouvelle balise devrait remplacer l'ancienne balise, mais il devrait y avoir un historique disponible.

C'est comme avoir une branche sur mon ordinateur que je ne change jamais et de temps en temps fusionner le tronc en elle. Mais cela devrait être fait sur le référentiel complètement. (sans avoir à checker/checkout etc)

Ceci me permettrait de regarder dans l'histoire de Root/ProjectPool/projectA et voir les changements de celui-ci. Une sorte d'histoire de révision de haut niveau.

MISE À JOUR:
Je suis désolé oublié de poser une question claire -.-
Après avoir visionné les réponses qui ont été jusqu'à présent arrivés, je dirais que les copies des projets dans ProjectPool sont des branches de les projets originaux. Je pourrais alors les fusionner à partir du tronc n'importe quand j'ai besoin d'une nouvelle version dans ProjectPool.
La question est maintenant, s'il y a un moyen de faire la fusion "en ligne", sans avoir à créer une copie de travail en premier.

Répondre

7

> > Maintenant, les balises dans ProjectPool changent de temps à autre.

Tags sont des jalons, ils ne devraient pas être en train de changer. Vous devriez créer une nouvelle étiquette sur chaque version.

> > Cela signifie un tronc version spécifique de ProjectA est commited et je veux créer une copie de cette révision dans Root/ProjectPool/projeta. La nouvelle balise devrait remplacer l'ancienne balise, mais il devrait y avoir un historique disponible.

Qu'est-ce que vous avez besoin ici est un branch de ProjectA sous ProjectPool que vous pouvez répétitivement fusionner avec trunk de ProjectA. Avec quelque chose comme ça

svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH] 

se réfèrent: http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.merge.html

> > Cela me permettrait de regarder dans l'histoire de Root/ProjectPool/projeta et voir les changements de celui-ci. Une sorte d'histoire de révision de haut niveau.

On dirait que vous avez pris en charge votre structure de répertoires. Je vous suggère de suivre cette structure, si possible.

-Root 
    +--ProjectPool 
     +--ProjectA 
      +----trunk 
      +----tags 
      +----branches 
     +--ProjectB 
      +----trunk 
      +----tags 
      +----branches 

Vous pouvez libérer ProjectA et ProjectB dans leurs tag s. Le développement plus récent continuera en trunk. Pour tout développement latéral ou mise à jour, créez un branch dans le répertoire des branches. Lorsque la branche est terminée, fusionnez-la de nouveau au tronc. De cette façon, votre trunk reflétera toujours toutes les révisions et modifications. Et, c'est plus pratique (et conventionnel).

Espérons que cela aide.

+1

+ 1 explication parfaite pour la mise en page de repo sûre/saine –

+0

Vous avez écrit que j'ai besoin d'une branche sous ProjectPool que je devrais fusionner de façon répétée avec le tronc. C'est exactement ce que je voulais dire quand j'écris: «C'est comme si j'avais une branche sur mon ordinateur que je ne change jamais et de temps en temps fusionnant le tronc dedans.». Je cherche maintenant un moyen de fusionner "en ligne" sans avoir à obtenir une copie de travail. – MOnsDaR

+0

@MOnsDaR ce que vous voulez, c'est la commande combo 'merge' et' commit'. Je doute sérieusement que ce soit possible. Fusionner le processus complet est 'merge',' resolve' et 'commit' dans cette séquence. Je comprends que dans votre cas 'résolution' n'est pas là, mais' SVN' ne peut pas supposer cette possibilité. Donc, je suppose que vous devrez vous engager explicitement. La commande mentionnée dans l'URL fusionnera dans le répertoire courant. Donc, si vous êtes confiant, vous pouvez écrire un script shell. Cela fusionne et s'engage. Mais encore, il y aura des téléchargements. – Nishant

0

Vous ne faites vraiment toute question donc je ne sais pas si vous êtes au courant de la merge mais c'est subcommand celui dont vous avez besoin:

Portez une attention particulière au paramètre --accept; vous en avez besoin pour obtenir une résolution automatisée des conflits:

C:\>svn help merge 
[...] 
    --accept ARG    : specify automatic conflict resolution action 
          ('postpone', 'base', 'mine-conflict', 
          'theirs-conflict', 'mine-full', 'theirs-full', 
          'edit', 'launch') 

Je recommande aussi de lire le chapitre Branching and merging dans le livre de Subversion.

Questions connexes