Quelle est la meilleure façon de faire de l'une des branches d'un dépôt subversion le nouveau tronc?
Il y a eu une réécriture majeure pour tout le système: les choses ont été déplacées, réécrites, remplacées, supprimées, renommées, etc. Le code réécrit a été testé et est prêt à remplacer l'ancien coffre.
Fondamentalement, l'ancienne ligne principale (Trunk 5) est étiquetée et se terminera ici. La branche réécrite (Branche 6) va devenir la nouvelle ligne principale (Trunk 7):
Tronc (1) -> Tronc (2) -> Tronc (5) -> × + -> nouveau Tronc (7) \ \ | fusion de fourche ??? \ \ | + -> Succursale (3) -> Succursale (4) -> Succursale (6) - +
Tous les changements en cours de l'ancien 'Trunk' sont déjà incorporés dans la 'Rewritten branch'
Comment puis-je faire ceci?
la source
Je suis d'accord avec l'utilisation de la commande svn move pour atteindre cet objectif.
Je sais que d'autres ici pensent que c'est inhabituel, mais j'aime le faire de cette façon. Lorsque j'ai une branche de fonctionnalité et que je suis prêt à la fusionner avec un tronc qui a également été considérablement modifié, je la fusionner avec une nouvelle branche, généralement nommée
<FeatureBranchName>-Merged
. Ensuite, je résous les conflits et teste le code fusionné. Une fois que c'est terminé, je déplace le coffre dans le dossier des balises pour ne rien perdre. Enfin, je déplace mon<FeatureBranchName>-Merged
vers le coffre.De plus je préfère éviter la copie de travail lors des déplacements, voici des exemples des commandes:
Remarque: j'utilise 1.5
la source
Je regardais juste ce problème récemment, et la solution avec laquelle j'étais très satisfait était la performance
svn merge --ignore-ascendance tronc-url branch-url
sur la copie de travail de ma malle.
Cela n'essaie pas d'appliquer les changements de manière historique (maintenir les changements dans le coffre). Il "applique simplement le diff" entre le tronc et la branche. Cela ne créera aucun conflit pour vos utilisateurs dans les fichiers qui n'ont pas été modifiés. Vous perdrez cependant vos informations historiques de la branche, mais cela se produit quand même lorsque vous effectuez une fusion.
la source
Vous recommandons de faire ces changements via l'outil de navigation du référentiel.
Tenter de grandes opérations de suppression et de déplacement via la copie de travail est un excellent moyen de tuer la copie de travail. Si vous êtes obligé d'utiliser la copie de travail, effectuez des validations incrémentielles après chaque opération de suppression ou de déplacement et METTEZ à JOUR votre copie de travail après chaque validation.
la source
Si vous voulez faire de la branche le nouveau tronc (c.-à-d.) Supprimer tous les changements dans le tronc qui ont été faits depuis la création de la branche, vous pouvez 1. Créer une branche du tronc (à des fins de sauvegarde) 2. "annuler les modifications "sur le tronc (sélectionnez toutes les révisions après la création de la branche 3. Fusionner la branche avec le tronc.
L'histoire devrait rester ainsi.
Cordialement, Roger
la source
Les solutions @Aaron Digulla et @kementeus sont réalisables. Pour les référentiels Subversion 1.4, les opérations de copie / déplacement peuvent rendre la migration future vers une structure de référentiel différente ou la division des référentiels difficile.
Je pense que les améliorations de la version 1.5 incluent une meilleure résolution de l'historique des mouvements / copies, donc ce ne serait probablement pas un problème pour un référentiel 1.5.
Pour un référentiel 1.4, je recommanderais d'utiliser
svnadmin dump
etsvndumpfilter
d'effectuer le mouvement du tronc existant ailleurs, puis de déplacer la branche vers le tronc avec le même mécanisme. Chargez les deux fichiers de vidage dans un référentiel de test, vérifiez, puis déplacez-le en production.Bien sûr, sauvegardez votre référentiel existant avant de commencer.
Cela préserve l'historique sans enregistrer explicitement le déplacement / la copie et facilite la réorganisation future, en préservant l'historique.
Edit: Comme demandé, la documentation du comportement 1.4, du livre 1.4 Red-Bean, Filtering Repository History
Cela s'applique aux migrations / réorganisations utilisant
svndumpfilter
. Il y a des moments où un peu de travail supplémentaire maintenant peut économiser beaucoup de travail supplémentaire plus tard, et en gardant une utilisation facile desvndumpfilter
disponible pour les migrations / réorganisations futures, atténue le risque à un coût relativement faible.la source
Bien que les réponses ci-dessus fonctionnent, ce ne sont pas les meilleures pratiques. Le dernier serveur svn et la piste client fusionnent pour vous. Ainsi svn sait quelles révisions vous avez fusionnées dans une branche et d'où. Cela aide beaucoup lors de la mise à jour d'une branche, puis de sa fusion dans le coffre.
Quelle que soit la version de Subversion que vous utilisez, il existe une méthode de bonnes pratiques pour récupérer les modifications d'une branche dans le tronc. Il est décrit dans le manuel Subversion: Contrôle de version avec Subversion, Chapitre 4. Branchement et fusion, maintien d'une branche synchronisée .
la source
C'est une configuration vraiment bizarre / inhabituelle dans SVN, même si je pense que c'est loin d'être une "bonne pratique" du tout, de toute façon, je suppose que vous pourriez faire quelque chose comme:
Bonne chance
la source