8
votes

Guide pratique sur la branche Subversion Fusion

préface

Je me rends compte qu'il y a déjà beaucoup de questions sur la fusion des branches SVN sur le débordement de la pile. J'ai lu beaucoup d'entre eux, mais je n'ai toujours pas vraiment trouvé les informations que je recherchais, alors veuillez lire cette question dans son intégralité avant de proposer de le fermer comme une duplicata.


J'ai besoin de fusionner une branche SVN dans une autre. Je suis assez à l'aise avec la théorie de la ramification et de la fusion, mais j'ai toujours eu du mal à jouer avec la pratique consistant à effectuer la fusion, plus précisément, avec l'identification et la résolution des conflits. Je soupçonne que la cause fondamentale de ce problème est un manque de compréhension de ma part des outils nécessaires à la réalisation du travail, c'est-à-dire TortoiseVNV et les divers outils de fusion visuels disponibles. SourceGear DIFFMERGE et au-delà de la comparaison en tant qu'utils candidats pour effectuer la fusion à trois voies. J'ai essayé de diffamerger, mais j'ai eu du mal à l'utiliser efficacement. Je m'attendais à voir les trois fichiers suivants tout en résolvant les conflits

  • Fichier de la branche A
  • Fichier de la branche B
  • résultat de l'exécution de la fusion

    mais plutôt ce que je vois est

    • Fichier de la branche A
    • Fichier de la branche B
    • ancêtre commun d'A et B, AKA BASE REVISION

      Cela m'a amené à me demander comment je peux voir le résultat de la fusion après chaque action que je prends lors de la résolution des conflits visuellement. J'ai également eu du mal à effectuer une telle action, par exemple, d'accepter un changement particulier de la succursale A ou B. Après avoir lu sur le sujet un peu plus, il semble maintenant que la révision de base est en fait l'endroit où les résultats de la fusion devrait être montré, est-ce correct?

      Je pense qu'un screencast ou un didacticiel vidéo démontrant la fusion des succursales avec TortoiseSVN et un outil de fusion visuelle répondrait probablement à la plupart de mes questions en suspens sur la manière d'utiliser efficacement ces outils. Je suis plus intéressé par le processus de résolution des conflits qui exercent la fusion elle-même, mais ce serait génial si les deux étaient couverts.


0 commentaires

3 Réponses :


1
votes

Perforce avait un outil de fusion qui vous montrerait toutes les quatre versions ( base, a, b et fusionnez) et vous montrerait visuellement ce que votre fusion ressemblerait.

Lorsque vous effectuez des fantasmes complexes, je trouve qu'il est utile de simplement regarder le fichier brut (en supposant que ce n'est pas des données d'octets) et de comparer moi-même les pièces de révision moi-même. Si votre fusion est très compliquée (c'est-à-dire, se chevauchent des fonts, du code déplacé, etc.) Cela pourrait bien être le seul moyen de le faire.

Une autre chose que j'ai vue faite est d'exporter une copie de l'ensemble de travail, puis de fusionner manuellement à l'aide d'un outil côte à côte (comme au-delà de la comparaison ), puis faites simplement un enregistrement droit.

La seule chose qui m'a toujours jeté sur les fantasmes était qu'ils étaient en arrière de ce que je m'attendais à arriver. Cela m'a toujours causé des problèmes avec la révision de base.


0 commentaires

5
votes

En fait, il existe des outils de fusion à double sens et à trois voies. Un double moyen devrait montrer trois fenêtres. La version de la branche source A, la Direction de la cible B et un résultat de la fusion. Une fusion à trois voies affichera la version de base en plus de cela. Vous pouvez imaginer une sorte d'équation de résultat = cible + (source de base). En effet, l'algorithme calculera un ensemble de diffys entre la base et la source et une autre partie entre la base et la cible, puis frappez tous les diffusions communs aux deux. Ensuite, il vous montrera une liste de diffys restants pour la décision. Pour diffèrent la source ou la cible où la même section de code n'est pas affectée dans l'autre branche, elle décide automatiquement d'utiliser le diff approprié. Lorsque les diffs sont dans la même section du code dans les deux branches, les diffs sont marqués en tant que conflit et votre outil vous fera généralement de votre part en conflits un par un. Les conflits ne sont pas pré-décidés et le code n'apparaîtra pas dans le fichier de résultat avant de prendre une décision. Vous obtenez la possibilité de passer à la prochaine diff ou au conflit suivant. Tous les conflits doivent être décidés par vous. Basé sur vos connaissances, vous voulez parfois revenir en arrière (à nouveau décider), même diffusez différent de manière non conflictuelle afin de compléter la fusion.

de sorte que le processus de fusion d'un fichier se termine essentiellement par diffèmement ou pour accélérer uniquement par exemple par un par un par un par un et décider de prendre des changements de branche source, de la branche ciblée ou de modifier le code en question pour créer une nouvelle changement fusionné. Les modifications que vous faites doivent apparaître dans la fenêtre de résultat et une fois que vous avez décidé tous les conflits, l'outil devrait vous permettre de sauvegarder le résultat, qui deviendra ensuite une nouvelle version sur la branche cible. La fenêtre avec fichier de base est généralement indiquée uniquement pour une référence en tant que version qui n'a ni une source ni une modification cible.

Certains outils permettent une fusée automatique. Au cas où il n'y a pas de différence conflictuelle, l'outil utilisera la résolution de diffuse démesurée sans vous poser des questions. Prenant automatiquement toutes les modifications de la branche de la source et de la cible. Bien que lexiquement, ces changements ne changent pas de conflit, ils pourraient encore entrer en conflit d'une autre manière. Le code résultant peut ne pas compiler ou être logiquement correct. Mais aucun outil de fusion ne peut décider que. C'est pourquoi les résultats de fusion doivent être lus et examinés par un humain puis compilé et exécuté à travers une suite de tests avant d'être déterminé à la branche cible.


0 commentaires

3
votes

Vous pouvez installer KDIFF3 pour effectuer une fusion à trois voies avec Tortoisesvn. Il intègre automatiquement avec Tortoisesvn sur la plate-forme Windows.

Les trois fichiers que cela indique que vous êtes un ancêtre commun des deux branches, du fichier de la branche A et du fichier de la branche B. Vous résolvez ensuite les conflits dans le fichier qui représente la branche que vous fusionnez.

Je trouve qu'il s'agit d'un outil très intelligent et que dans des cas normaux choisissent automatiquement la bonne option pour la fusion de conflits simples.

Quand il n'est pas sûr, cela vous demandera quoi faire.

J'ai parfois eu des problèmes où il a choisi le mauvais moyen. Ceux étaient des occasions où le chemin de la branche / fusion était assez complexe.

Et, comme le dit grisalwizard, il est parfois plus facile de regarder le fichier brut. Subversion produira un seul fichier RAW dans la branche que vous fusionnez avec le balisage en vous indiquant que les modifications étiaient de quelle révision. J'ai déjà besoin d'ouvrir ce fichier dans mon IDE et de le réparer de là.


1 commentaires

KDIFF3 est un outil indispensable lors de la fusion.