2010-04-02 3 views
7

Est-il possible de fusionner une série de révisions d'une branche à une autre dans Mercurial?fusionner des révisions sélectionnées d'une branche sur une autre dans Mercurial

par exemple.

|r1 
|r2 
|r3 
|\___ 
| | r5 
| | r6 
| | r7 
| | ... 
| | r40 
|r41 

Si je veux fusionner les versions 6 & 7, mais pas 5, dans la branche principale - est-ce possible?

Une telle fusion peut être trivial, par exemple, si les fichiers modifiés r5 qui ne sont pas modifiés dans 6 & 7 (et donc ses changements, sinon nécessaire, peuvent être ignorées sans)

Qu'en est-multiple révision sélectionnée varie de la branche A à la branche B? par exemple. fusionner 4-7, 20-25 et 30-34?

(ce n'est pas un cas réel, juste une illustration. Je suis en train de comprendre si hg a cette fonctionnalité de fusion révision de gamme que je sais svn a)

Répondre

7

La réponse est simple pas.

Ceci est contraire à l'esprit de Mercurial.

Votre graphique implique que 6 dépend de 5 donc tout ce qui tire 6 devrait tirer 5 aussi sinon il n'a aucun sens.

Il me semble que vous avez mal Mercurial ici. Si votre arbre de changement est linéaire, c'est généralement un signe que vous utilisez Mercurial comme si vous utilisiez CVS ou SVN.

Votre arbre de changement devrait ressembler davantage:

4 
/\ 
/| |\ 
/| | \ 
5 7 23 \ 
| | | 25 
6 8 24 | 
     26 

Et vous pourriez tirer soit la branche à partir de 5 ou celle qui commence à 23. Maintenant, l'erreur est humaine, donc il y a une "facilité" appelée export, qui vous permet de créer un fichier diff simple à partir d'un changeset.

Dans votre cas, vous feriez ainsi:

  • clone le dépôt jusqu'à r4
  • créer un diff de r6 et un de r7 (exportation)
  • appliquent à la fois (dans l'ordre) sur le nouveau clone (import)
  • exécuter vos tests unitaires jusqu'à ce qu'ils passent
  • commettent
  • traction dans r41
  • fusion
  • exécuter vos tests unitaires jusqu'à ce qu'ils passent
  • commettent

Si vous le souhaitez, vous pouvez aussi aller la route d'extension. Il existe plusieurs extensions utiles pour manipuler les changesets. Un ensemble d'échantillons:

Ici vous pouvez par exemple cloner le dépôt (important, toujours tester ces derniers sur les clones, juste au cas où), puis l'effondrement des plages qui vous intéressent dans. Ensuite, vous pouvez les exporter/importer.

+0

Il n'est pas vrai que r6 doit dépendre de r5 de manière significative. Par exemple, il se peut que r5 ne change qu'un fichier que les autres révisions ne touchent pas, donc il n'y a absolument aucun problème à ignorer cette révision particulière (d'un point de vue centré sur les données). S'il vous plaît ne supposez pas que j'utilise hg de cette façon, j'essaie juste de comprendre ses capacités. –

+0

En outre, je n'ai pas vraiment compris ce que vous voulez dire par la façon dont l'arbre ressemble. Votre illustration d'arbre montre plusieurs branches avec peu de révisions. Est-ce l'esprit de hg - pour avoir seulement des branches courtes? Parce que parfois vous avez simplement besoin d'une branche distincte pour faire beaucoup de travail sur ce qui ne va pas dans le coffre. Si vous gérez de nombreuses versions historiques, il n'est pas possible d'avoir un référentiel par version, donc les branches sont la seule solution raisonnable. Alors, comment proposez-vous de garder ces branches courtes, et pourquoi serait-ce mieux que d'avoir plusieurs branches divergentes en cas de besoin? –

+0

r6 dépend de r5 parce que vous l'avez dit quand vous avez fait le parent de r5 r6. Si vous voulez éviter cela, et ils sont vraiment indépendants, vous pouvez 'hg update' à un autre parent avant de changer 6. Si avant de faire r6 vous aviez fait 'hg update r4' alors le parent de r6 serait r4, et vous pourrait le déplacer à toute branche de développement qui avait déjà r4. Dans le sens le plus large lorsque vous effectuez un changement, demandez-vous «quel est le premier point dans l'histoire que j'aurais pu faire cela» et ensuite «hg update» à ce point. Ensuite, vous avez un changeset qui peut être facilement fusionné partout où cela a du sens. –

Questions connexes