2010-06-07 8 views
6

Disons que j'ai une branche caractéristique nommée "branches/BigFeature". Je souhaite transférer ces modifications dans le tronçon, apporter des modifications au tronçon et les fusionner dans la branche "BigFeature" pour que le développement puisse continuer.Pourquoi ai-je des conflits lors de la fusion d'une branche vers la jonction et de sa fusion avec la jonction?

Mes étapes étaient:

  1. fusionner les derniers changements dans le coffre aux branches/BigFeature. (Tortoise SVN -> Fusionner une série de révisions)

  2. Fusionner les changements dans les branches/BigFeature à Trunk. (Tortoise SVN -> Réintégrer une branche)

  3. Apportez quelques modifications au tronçon. Fusionner les modifications du tronçon en branches/BigFeatures. (Tortoisesvn -> Fusionner une plage de révisions)

Le problème se pose à l'étape 4. Quand je fusionner Retour à BigFeature Je reçois toutes sortes de conflits. Il semble avoir un problème avec les fichiers qui ont été ajoutés à l'origine dans les branches/BigFeature mais qui ont été fusionnés avec le Trunk.

Le message qu'il me donne est « La dernière opération de fusion a essayé d'ajouter le fichier « blah », mais il a déjà été ajouté localement.

Cela fait un peu de sens parce que le fichier était à l'origine ajoutée dans les branches/branche BigFeature puis a fusionné avec le tronc. Mais pourquoi ne peut pas l'opération de fusion réaliser cela? Pourquoi est-il à venir comme un conflit?

le même genre d'erreur se produit pour les fichiers supprimés.

La dernière opération de fusion a tenté de supprimer/déplacer/renommer le répertoire 'blah', mais elle a été supprimée, déplacée ou renommée localement.

Merci pour votre aide.

+5

SVN fusionnent en général ne fonctionne pas bien. – alternative

+1

Y a-t-il des alternatives? – Justin

+5

Quiconque dit que svn merge ne fonctionne pas ne le fait pas correctement. La vision conceptuelle des changements de Svn n'est pas la meilleure (les SCM plus récents comme git l'ont un peu rapproché de la marque), mais ce n'est pas vrai qu'on ne peut pas fusionner avec subversion ou même gérer une base de code compliquée avec des fusions dedans et dehors. – Ether

Répondre

7

Malheureusement, c'est un manque de svn, la façon dont il est construit.

Les étapes svn doivent ressembler à ceci:

1. (not modified) Merge the latest changes in Trunk to branches/BigFeature. (Tortoise SVN -> Merge a range of revisions) 
2. (not modified) Merge the changes in branches/BigFeature to Trunk. (Tortoise SVN -> Reintegrate a branch) 

2a. Delete branch branches/BigFeature 
2b. Create branch branches/BigFeature from current trunk 

3. (not modified) Make some changes to Trunk. 
4. (not modified) Merge the changes in Trunk to branches/BigFeatures. (Tortoise SVN -> Merge a range of revisions) 

branche SVN n'est plus utilisable après une opération de réinsèrent.

Mise à jour: il existe un second way, au lieu de supprimer la branche.

2a. on branch: 
    $ svn update 
    Updated to revision X 
    $ svn merge --record-only -c X ^/trunk 
    $ svn commit -m "Block revision X from being merged into the branch." 

Je ne savais pas ce truc, je l'ai appris grâce à votre question: D

+0

C'est malheureux. Mais bon au moins ce n'est pas juste moi :) Et ce travail autour devrait faire l'affaire. – Justin

+0

Il n'est pas nécessaire de supprimer et de recréer des branches tout le temps. Vous devez juste construire la commande de fusion correctement pour ne pas recompiler tout ce que vous avez fusionné auparavant. – Ether

+0

Pouvez-vous donner un aperçu de la façon de faire cela? Je suis d'accord avec la ligne cmd mais je préférerais évidemment que Tortoise SVN fournisse un moyen de le faire. – Justin