web-dev-qa-db-fra.com

Quelle est la bonne façon de faire une fusion Subversion dans Eclipse?

Je suis assez habitué aux fusions CVS dans Eclipse. Je suis par ailleurs satisfait de la manière dont Subclipse et Subversive fonctionnent avec le référentiel SVN, mais je ne sais pas trop comment procéder à une fusion.

Quand je fais une fusion, il semble vouloir coller les fichiers fusionnés dans un répertoire séparé de mon projet plutôt que d'écraser les anciens fichiers qui doivent être remplacés dans la fusion, comme je suis habitué dans CVS.

La question n'est pas particulière à Subclipse ou Subversive.

Merci pour l'aide!

17
awied

Je conseillerais de ne pas essayer d'utiliser les plug-ins d'Eclipse comme accès principal à Subversion.

Si vous développez sur Windows, TortoiseSVN est le meilleur programme que j'ai vu pour un accès Subversion. Explorez le répertoire dont vous souhaitez fusionner, cliquez dessus avec le bouton droit de la souris et utilisez l'option de fusion Tortoise SVN. En supposant une fusion non interactive, une fois que vous obtenez des conflits, vous devrez examiner chaque fichier en conflit et les éditer avant de les marquer comme résolus. Pour ce processus, je recommande un programme appelé KDiff3, qui affiche votre copie du référentiel local (ce qui était stocké dans le fichier .svn avant la fusion), votre copie locale (y compris les modifications) et la copie provenant du référentiel, et vous permet de: voir facilement (et même modifier à la main si nécessaire) le résultat de la fusion. Il gère également un tas de conflits mineurs automatiquement.

KDiff3 est portable, TortoiseSVN est une extension Windows Shell, donc si vous utilisez un autre environnement, j'essaierai d'utiliser simplement SVN pour fusionner. Mais ce serait beaucoup plus pénible :)

1
MetroidFan2002

Fusion d'une branche entière dans le coffre

  1. Inspectez l'historique du projet de la branche pour déterminer la version à partir de laquelle la branche a été extraite

    • par défaut, Eclipse Team "History" affiche uniquement les 25 dernières révisions. Vous devrez donc cliquer sur le bouton "Afficher tout" dans cette vue.
    • lorsque vous dites "Tout afficher", cela vous ramènera au-delà de la date de la branche et vous montrera également l'historique du tronc, de sorte que vous devrez rechercher votre commentaire à l'endroit où vous avez créé la branche.
    • NOTE: si vous utilisez Tortise SVN pour cette même tâche (accédez à la branche et sélectionnez "Afficher le journal"), il ne vous montrera que l'historique de la branche afin que vous puissiez dire exactement où la branche a commencé
  2. Alors maintenant, je sais que 82517 était la première ID de version de l’historique de la branche. Donc, toutes les versions de la branche passée 82517 comportent des modifications que je souhaite fusionner dans le coffre

  3. Allez maintenant dans le projet "trunk" de votre espace de travail Eclipse et sélectionnez "clic droit - Équipe - Fusionner"

  4. La vue par défaut est la fusion de 1 url

    • sélectionnez l'URL de la branche à partir de laquelle vous fusionnez
    • sous Révisions, sélectionnez "Tous"
    • appuyer sur OK
  5. Cela vous mènera à la perspective "Synchronisation d'équipe" (sinon, vous devriez y aller vous-même) afin de résoudre les conflits (voir ci-dessous).

Re-fusionner plus de changements de branches dans le coffre

  1. Insérez l'historique du projet de coffre afin de déterminer la dernière fois que vous avez fusionné dans le coffre (vous auriez dû le commenter)

    • à des fins d'argument, disons que cette version était 82517
  2. Alors maintenant, je sais que toute version supérieure à 82517 dans la branche doit être fusionnée dans le tronc

  3. Allez maintenant dans le projet "trunk" de votre espace de travail Eclipse et sélectionnez "clic droit - Équipe - Fusionner"

  4. La vue par défaut est la fusion de 1 url

    • sélectionnez l'URL de la branche à partir de laquelle vous fusionnez
    • sous Révisions, sélectionnez le bouton radio "Révisions" et cliquez sur "Parcourir".
    • cela ouvrira une liste des 25 dernières révisions de branches
    • sélectionner toutes les révisions avec un nombre supérieur à 82517
    • appuyez sur OK (vous devriez voir la liste de révision dans le champ de saisie à côté du bouton radio)
    • appuyer sur OK
  5. Cela vous mènera à la perspective "Synchronisation d'équipe" (sinon, vous devriez y aller vous-même) afin de résoudre les conflits (voir ci-dessous).

Résoudre les conflits

  1. Vous devriez être dans la perspective "Synchronisation d'équipe". Cela ressemblera à une synchronisation normale à des fins de validation dans laquelle vous verrez des fichiers nouveaux et des fichiers en conflit.

  2. Pour chaque fichier dans lequel vous voyez un conflit, choisissez "clic droit - Modifier les conflits" (ne double-cliquez pas sur le fichier, il affichera l'outil commit version diff, cela est TRES différent)

    • si vous voyez des choses comme "<<<<<<< .working" ou ">>>>>>> .merge-right.r84513", alors vous êtes dans le mauvais mode d'édition
  3. une fois que vous avez résolu tous les conflits dans ce fichier, indiquez au fichier de "marquer comme fusionné"

  4. une fois que tous les fichiers sont exempts de conflits, vous pouvez alors synchroniser votre projet Eclipse et les valider sur SVN.

72
DH4

Premièrement, si vous voyez ">>>>>" et autres dans vos fichiers lorsque vous les visualisez dans Eclipse, cela signifie probablement que vous ne consultez pas le fichier avec l'éditeur de comparaison approprié. Essayez de cliquer avec le bouton droit de la souris sur le fichier dans la vue Projet ou Synchroniser et de sélectionner "Modifier les conflits" pour afficher un éditeur de comparaison qui affiche les régions en conflit sous forme graphique plutôt que sous forme de texte. Notez que l'éditeur de comparaison qui apparaît pour "Editer les conflits" est différent de celui que vous obtenez lorsque vous double-cliquez sur un fichier dans la vue Synchroniser - l'éditeur de comparaison doublieclick montre les différences entre votre fichier actuel et son existence. la dernière fois que vous l'avez extrait ou mis à jour, alors que la boîte de dialogue Éditer les conflits affiche les différences entre deux sources de modifications (par exemple, les modifications que vous avez fusionnées par rapport à celles qui existaient dans votre espace de travail avant la fusion).

Deuxièmement, vous voudrez peut-être être au courant d'un bogue dans certaines versions du plug-in subversif Eclipse qui entraîne que tous les fichiers ayant accepté les modifications de fusion sont marqués de manière incorrecte en tant que conflits. Ce bogue a été corrigé, mais beaucoup de personnes ne semblent pas encore avoir mis à jour pour obtenir le correctif. Plus de détails ici:

https://bugs.Eclipse.org/bugs/show_bug.cgi?id=312585

4
Some Guy

Utilisez l’intégration Eclipse, cela fonctionne parfaitement.

Le principal changement par rapport à CVS est que vous ne fusionnez que les deltas d’une branche, c’est-à-dire que vous passez d’une révision à une autre. C’est-à-dire que vous devez suivre la révision de démarrage correcte d’une manière ou d’une autre (sauf si vous avez l’historique de fusion de svn 1.5)

Si vous avez bien compris, c'est à vous de corriger les modifications avec l'éditeur de comparaison.

4
David Pierre

En général, j'extrais les deux branches, puis j'utilise l'option de comparaison les unes avec les autres, qui permet une comparaison semblable à une synchronisation des deux arbres source. Après avoir intégré les modifications dans une branche, vous pouvez recommencer l’enregistrement dans le référentiel.

4
Joe Skora

Rappelez-vous qu'avec svn, il est assez facile de rétablir un arbre modifié dans un état clair. Disposez simplement d'un espace de travail vierge sur la branche de destination de la fusion et exécutez la commande de fusion pour importer les modifications depuis la branche source de la fusion, puis synchronisez votre espace de travail et vous obtiendrez votre fenêtre de comparaison Eclipse habituelle affichant tous les fichiers de fusion modifiés et les conflits.

Si, pour une raison quelconque, vous ne pouvez pas résoudre les conflits, vous pouvez revenir au projet et revenir à un état minimal, sinon vous effectuez la fusion sur place et une fois que vous avez terminé, vous pouvez vous engager. Notez que vous n’avez pas besoin de commettre, une fois que vous avez fini de gérer les conflits, vous pouvez également revenir à la vue dev, vérifier que le code est compilé, exécuter vos tests unitaires, etc., puis synchroniser à nouveau et valider (une fois les conflits localement localisés). résolus ils ne reviendront pas)

la dernière fois que j'ai regardé, lorsque vous utilisez la commande de fusion subclipse, il écrase le fichier fusionné (en utilisant des marqueurs de conflit pour afficher les zones en conflit) et place les côtés gauche et droit d'origine de la fusion au même endroit. il ne faut rien mettre dans des répertoires différents.

En règle générale, il est préférable de valider toutes les modifications de fusion dans un même commit et de ne conserver que les modifications de fusion dans le commit afin que vous puissiez annuler la fusion ultérieurement si nécessaire.

3
Jean

l'outil de fusion d'OpenCollabNet pour subclipse est très soigné. Il existe de nombreux types de fusion disponibles et la fusion que je viens d'effectuer avec elle de manière transparente. Je le recommande.

3
T0xicCode

La seule chose qui manque de synchronisation dans Eclipse est la capacité d’enregistrement. Dans la vue Synchronisation d'équipe, je peux voir toutes mes modifications et résoudre les conflits. Il serait donc plutôt intuitif de procéder à l'enregistrement directement au lieu de revenir à la vue Java et de procéder à l'enregistrement.

2
nku

J'ai atterri ici parce que je cherchais un moyen de fusionner un éditeur de fusion externe (KDIFF3), mais de lancer la fusion à partir d'Eclipse. Je n'étais pas satisfait des réponses fournies ci-dessus. Voici donc comment configurer kdiff3 en tant qu'éditeur de fusion et de diff pour SVN dans Eclipse:

allez dans Windows -> Préférences → Équipe -> SVN -> Visualiseur de différences Ajoutez une nouvelle configuration (bouton Ajouter): Extension ou type MIME: * - si vous le souhaitez, vous pouvez spécifier différents types MIME pour différents éditeurs. alquantor.

Diff : Chemin du programme C:\Program Files\KDiff3\kdiff3.exe (ou si vous avez votre éditeur de fusion - recherchez le chemin de Windows, n'hésitez pas à ajouter une version de Linux dans les commentaires ou à modifier cette réponse.)

Arguments: $ {base} $ {mine} $ {leur}

Fusionner : chemin du programme C:\Program Files\KDiff3\kdiff3.exe

Arguments: $ {base} $ {mine} $ {leur}} -o $ {fusionné}

Cela fonctionnera probablement aussi pour d'autres éditeurs de fusion, mais avec une syntaxe d'argument différente (voyez-le et laissez-nous savoir :)).

L’utilisation est comme d’habitude (équipe-> conflits d’édition) pour la fusion et la comparaison-> truc pour la vue diff.

À votre santé

0
fl0w