web-dev-qa-db-fra.com

SVN - impossible de fusionner la branche dans le coffre - nombreux conflits d'arbres

J'ai ce que je pensais être un scénario simple - en utilisant TortoiseSVN:

1) J'ai créé une branche (B2) d'une application (pour travailler sur la mise en œuvre d'images-objets et de JAWR).

2) Les tests et le développement se sont déroulés normalement sur le coffre.

3) J'ai modifié la succursale plusieurs fois au cours des derniers jours en:

3.1) Tronc fusionné (par plage de révisions) à ma copie de travail branch-b2, résolution des conflits lors de la fusion.

3.2) (après avoir testé branch-b2), je commets la branche ré-basée b2.

Tout cela a fonctionné comme je m'y attendais. Mais fusionner la branche dans le coffre a son chemin avec moi:

4) après toutes les mises à jour validées dans branch-b2; Je m'assure de faire une mise à jour SVN sur trunk and branch-b2.

5) Ensuite, j'essaie de fusionner (plage de révisions) de branch-b2 dans le coffre. Cependant, pour tout nouveau fichier ajouté au tronc, puis ajouté à branch-b2 lorsque je le rebasonne, j'obtiens un conflit d'arborescence. Je ne suis pas sûr de la manière appropriée de résoudre ces conflits.

Le conseil le plus typique que j'ai vu est de supprimer les fichiers en conflit d'arborescence du tronc, puis de fusionner la branche. ou supprimez l'intégralité du coffre, copiez les fichiers de branche, puis validez-les en tant que nouvelle version dans le coffre. Aucune de ces options ne semble être une bonne idée - la première est une douleur, et les deux semblent perdre leur historique de révision de fichier.

Qu'est-ce que j'ai mal fait, et comment puis-je résoudre le problème?

51
mitch_moop

On dirait que vous utilisez le style de fusion pré-1.5 et que vous essayez de réintégrer la branche dans le tronc. Dans ce cas, vous voulez tout d'abord vous assurer que toutes les modifications apportées au tronc ont été fusionnées dans la branche, puis au lieu de fusionner une branche avec une copie de travail pointant sur le tronc, vous souhaitez fusionner le message @ HEAD TO branch @ HEAD "avec la copie de travail pointant sur le tronc. En substance:

"Donnez-moi tous les changements nécessaires pour que le tronc soit identique à la branche".

Cela fonctionne si vous avez déjà fusionné toutes les modifications apportées au tronc dans la branche, car la seule différence entre le tronc et la branche réside dans les modifications apportées à la branche.

Avoir un sens? :)

71
Rytmis

J'ai étudié le même problème ... C'est une "fonctionnalité" dans Tortoise SVN 1.6.5 . TortoiseSVN 1.5 fonctionne bien avec notre référentiel (SVN 1.5) . TortoiseSVN 1.6.5 lors de la création d'une nouvelle base ajoute des fichiers NEW (sans sauvegarder l'historique de fusion).
Et la réintégration des branches dans le traitement de ces fichiers en conflit avec Mainline.

J'ai résolu le problème en utilisant la fonctionnalité de TortoiseSVN 1.6 "réintégrer la branche". Il est spécialement conçu pour les branches de fonctionnalités.

-- Alexey Korsun

3
user185717

Je ne pouvais pas vraiment comprendre comment la solution ci-dessus devait fonctionner alors mon travail est différent. Je me suis d'abord assuré que la branche contenait toutes les modifications du coffre.

1) J'ai reçu une nouvelle copie du coffre. 2) J'ai exporté la branche vers un emplacement temporaire à l'aide de la tortoise svn export. 3) J'ai utilisé l'Explorateur Windows pour copier l'intégralité de l'arborescence de la branche sur le tronc et écrasé tous les fichiers. 4) J'ai utilisé la commande de vérification des modifications sur Tortoise. 5) J'ai sélectionné tous les fichiers et cliqué sur Ajouter.

Vous devez utiliser des solutions qui n'ont pas été créées pour que les fichiers non envisagés n'incluent pas la sortie.

Je ne peux pas attendre que nous passions à la version 1.5+

1
Starkman

Sélectionnez les révisions à fusionner en sélectionnant l'option "Fusionner une plage de rivisions" à l'aide de TortoiseSVN. Cela empêchera les conflits d'arborescence pour les mêmes fichiers de se reproduire à chaque opération de fusion.

1
Dev

Voici un peu plus d'informations pour contribuer à la réponse de @Rytmis qui m'aide à garder cela droit.

Étapes de haut niveau pour rendre le coffre exactement comme une branche ou une étiquette:

  1. Départ du coffre.
  2. À l'aide d'une copie de travail du tronc, fusionnez d'un tronc à une branche/une étiquette.
  3. Commettre.

Exemple de commandes en ligne de commande 'svn':

svn checkout <trunk url>
cd trunk
svn merge <trunk url> <branch/tag url>
svn commit -m "<message>"
1
Jesse

Je pense avoir résolu ce problème ... 1. Faites un clic droit "branche" que vous avez fusionné . 2. Cliquez sur Tortoise SVN >> Fusionner 3. "Fusionner une plage de révisions" et Suivant 4. !!! VÉRIFIEZ "Reverse Merge" !!! , URL à fusionner à partir de "branche", plage spécifique "révision récemment fusionnée" et Next 5. Suivant 6. SVN Commite

Après cela, je peux fusionner d'une branche à une autre.

0
user8224326