La Subversion de Fusion: Comment faire Proprement Ré-intégrer une "Définitif" de la Branche?
Nous avons expérimenté une nouvelle technique pour gérer notre communiqué de branches.
Généralement, nous maintenons notre version actuelle sur le tronc, et de créer de la libération des branches pour chaque version. La branche est en constante évolution se produit habituellement, et le tronc est utilisé pour les corrections de bugs sur la version actuelle.
Nous avons régulièrement fait l'objet de la fusion de la correction de bogues à partir du tronc dans le communiqué de la branche (hebdomadaire).
Maintenant que nous sommes prêts pour une autre version, nous tenons à la fusion de la branche vers le tronc. Malheureusement, cela conduit à de nombreux conflits (> 50). J'ai d'abord été surpris, mais maintenant, je comprends que la Subversion ne peut pas facilement rectifier les changements dans la branche avec ce qui existe dans le coffre.
Est-il un moyen de dire à Subversion pour utiliser toutes les versions des fichiers dans la branche lors de l'intégration dans le tronc? Nous savons que la direction générale des versions de fichiers sont "correct".
Comme une alternative, on pourrait théoriquement abandonner le tronc et juste travailler hors de la succursale(s) - ramification de la direction générale de rejets.
Nous utiliser TortoiseSVN et Subclipse.
Vous devez vous connecter pour publier un commentaire.
À partir de la sortie de
svn help merge
:D'accepter les modifications de la branche lors de la fusion du tronc, vous avez besoin de la "
--accept theirs-full
" option.Je ne pense pas que TortoiseSVN 1.6.2 a un équivalent de l'option dans l'interface graphique. Vous pouvez toujours résoudre les conflits de manière interactive en sélectionnant "
use repository
" comme chaque conflit est produite lors de la fusion.Je crois que ce que vous faisiez en copiant des corrections de bug dans le coffre de votre branche est parfois connu comme la relocalisation. Tous les rebasage signifie dans ce cas est que vous prenez une branche qui était normalement basée que dire de révision r49 du tronc et de fusionner les changements de dire r50-r57 du tronc dans la branche de sorte que par la suite vous pouvez maintenant considérer que la branche de base sur la révision r57 du tronc à la place de révision r49.
Le problème dans la pratique, c'est que lors de la fusion d'une plage de révisions à partir du tronc, ou de toute autre base, dans l'une de ses branches, il ne se réinitialise pas la révision de base dans lequel la succursale a été créée, mais au lieu de cela laisse la normale mergeinfo propriétés comme la seule façon de savoir ce qui a été fusionné. Afin d'être en mesure de réintégrer les modifications d'une branche de revenir de base (tels que le tronc) sans involontairement la relecture de la fusion des changements de base-dire à partir de r50-r57 dans mon exemple précédent serait de fusionner les changements de la branche à la base par le "cherry picking" révisions particulières en sorte que toutes les révisions causés par le changement d'année de base (fusion de la base à la direction) ne sont pas inclus.
Malheureusement, d'autres qu'il appartiendra à la Subversion aux développeurs de mettre en œuvre un moyen d'automatiser cela, de sorte que seulement les révisions qui ne contiennent pas de mergeinfo propriété qui décrit une fusion qui ne contient que des révisions entre l'original de la base de la révision et de la cible la révision de la base (généralement de la TÊTE). Cela devient plus compliqué en ce qui fusionne comprennent souvent des modifications manuelles qui sont commis au jeu complet avec la fusion s'engager sur une branche qui serait perdu et également à l'origine d'un objet donné devrait être traqué à son ancêtre commun dans l'ordre pour que cela fonctionne correctement sur staircased branches. Autre que cela, une fonctionnalité qui permettrait à une branche pour être remplacé par une copie plus récente de la base et du tronc, avec toutes les précédentes s'engage une nouvelle demande en tant que série de séparer engage permettrait également de rendre cela possible, et cependant maladroit se comportent plus comme un vrai rebase.
Ces commentaires ne sont pas une réponse définitive, mais représentent ma compréhension longtemps utilisateur de Subversion. Si quelqu'un a d'autres points à ajouter ou pouvez choisir quelque chose qui peut être incorrecte dans mes déclarations s'il vous plaît laissez-moi savoir par tous les moyens, afin que nous puissions obtenir une réelle compréhension des capacités et des limites de l'actuelle mise en œuvre de Subversion sont.
Mise à jour: Selon la Subversion de la documentation, il semble que lors de l'utilisation de la --réintégrer option que la Subversion doit être en mesure de réintégrer le travail dans une succursale d'une manière que l'esprit tout de rafraîchissement possible fusions qui peut avoir été fait pour apporter des changements de base dans la branche. Bien sûr, cela est techniquement un peu différent de la relocalisation, mais je pense que c'est assez similaire dans l'utilisation qu'il pourrait être désignée comme année de référence. La principale question est maintenant de savoir si --réintégrer option fonctionne lorsque des modifications de la base ont été fusionnées dans le tronc d'un cerisier cueillies à la mode au lieu de les fusionner tout à partir de la BASE+le CÔTÉ de la TÊTE.
Mise à jour: Il semble que le "cherry picking" devrait être pris en charge ainsi lors de l'utilisation du svn merge --réintégrer option pour Subversion 1.5 et plus. En suivant ces instructions vous permettent de réintégrer sans causer de unintented conflits dus à la réintroduction de rebase changement de révisions.
Pour plus d'informations, lisez le livre de Subversion sous la section intitulée En gardant une Branche dans la Synchro.
Peut-être que je suis absent quelque chose ici, mais il semble que l'option la plus simple serait de supprimer le tronc et les re-créer par une ramification à partir de votre plus récente version de la branche.
En théorie, vous pourriez faire un "fusionner deux arbres" de la tête, du tronc, de la tête de la branche. Cette devrait éviter tout impair conflits en raison de leur réinsertion sociale.