Mercurial: Comment fusionner avec un contrôle manuel sur les modifications et les fichiers?

StackOverflow https://stackoverflow.com/questions/2414759

  •  19-09-2019
  •  | 
  •  

Question

Note: Le scénario que je décris est ne répond pas ici dans Stack Overflow: fusion Mercurial complètement manuelle .

Je vais vous expliquer ma requête avec un exemple. On suppose Je commence un dépôt Mercurial pour concevoir une voiture :

C:\Car$ dir
Car.cpp
Car.h

Je travaille sur la conception de voitures pour un certain temps et le dépôt ressemble à:

r0-r1-...-r100-(default)

À un certain moment, je branche par défaut SolarCarBranch pour travailler sur une voiture à énergie solaire en parallèle:

C:\SolarCar$ dir
Car.cpp
Car.h
Solar.cpp
Solar.h

Après un peu plus de temps, le dépôt ressemble à:

r0-r1-...-r100-...-r200-(default)
            \--r101-...-r201-(SolarCarBranch)

Comment fusionner SolarCarBranch retour par défaut ?

Prenez note des complications suivantes dans la fusion que je veux:

  1. je devrais être en mesure de poursuivre les travaux sur les deux par défaut et SolarCarBranch après la fusion.
  2. Il pourrait y avoir des corrections d'efficacité énergétique dans Car.cpp et Car.h SolarCarBranch que je veux tiré dans par défaut , mais je ne veux pas tous les changements dans ces fichiers. Donc, je veux cerise choisir les changements que je veux être inclus dans par défaut lors de la fusion (aka fusion manuelle).
  3. Je fais pas et veulent Solar.cpp Solar.h apparaissant dans par défaut . Le monde ne peut pas encore être prêt pour une voiture solaire. ; -)

Ce que j'ai appris:

  1. Ceci est possible par un hg merge SolarCarBranch
  2. Ceci peut être réalisé par la mise en kdiff3.premerge=False dans Mercurial.ini
  3. Je ne sais pas comment atteindre cet objectif depuis premerge=False fusionne encore / copies Solar.cpp et Solar.h en défaut sans me demander la permission.
Était-ce utile?

La solution

Vous êtes vraiment proche et vous n'avez pas besoin de recourir à la transplantation (beurk) ou picorage en général. Mise hors premerge est la première étape, puis supprimez les fichiers que vous ne voulez pas dans la branche principale après la fusion, mais avant de vous engager. Vous ne devez le faire qu'une seule fois.

Voici une configuration:

o  changeset:   3:343d531512a3
|  branch:      solar
|  tag:         tip
|  parent:      1:cb26642f8db5
|  user:        Ry4an Brase <ry4an@msi.umn.edu>
|  date:        Wed Mar 10 11:16:48 2010 -0600
|  files:       afile
|  description:
|  solar-change
|
|
| @  changeset:   2:c5d14e34db07
| |  parent:      0:56465175b2fc
| |  user:        Ry4an Brase <ry4an@msi.umn.edu>
| |  date:        Wed Mar 10 11:05:44 2010 -0600
| |  files:       other-main-file
| |  description:
| |  moremain
| |
| |
o |  changeset:   1:cb26642f8db5
|/   branch:      solar
|    user:        Ry4an Brase <ry4an@msi.umn.edu>
|    date:        Wed Mar 10 11:04:32 2010 -0600
|    files:       solar-only
|    description:
|    solar-initial
|
|
o  changeset:   0:56465175b2fc
   user:        Ry4an Brase <ry4an@msi.umn.edu>
   date:        Wed Mar 10 11:04:14 2010 -0600
   files:       afile
   description:
   initial

Vous pouvez voir que changeset 1 ajoute un fichier à la branche solaire - un fichier que nous ne voulons pas en défaut. Alors que 3 changeset tweaks un fichier qui existe aussi dans le principal, afile, et nous voulons contrôler manuellement si ce changement se produit ou non.

Alors faites hg update default ; hg merge -r solar. L'outil de fusion pop-up pour afile et nous décidons ligne par ligne ou morceau par morceau si nous voulons que ces changements. Après avoir sauvegardé faire hg stat:

% hg stat
M afile
M solar-only

Et nous voyons que l'énergie solaire est uniquement mis en attente pour commiting en défaut. Il suffit de l'enlever (avec if).

% hg rm -f solar-only

hg stat il montre que retiré:

% hg stat
M afile
R solar-only

et quand nous nous engageons, nous aurons ce que nous voulons dans le nouveau changeset.

Autres conseils

Votre première condition, pour être en mesure de poursuivre les travaux sur les deux branches, est satisfaite par tout simplement pas fermer la branche (que vous faites avec l'option --close-branch à hg commit).

Vous pouvez choisir la cerise changesets à fusionner en utilisant les extension de transplantation . Cela vous permettra de choisir seulement changesets spécifiques de fusionner en défaut.

La troisième condition est satisfaite par la l'idée que condition de ne pas mélanger les changements à la fois votre voiture régulière et votre voiture à l'énergie solaire dans la même livraison, vous pouvez tirer changesets arrière de la branche solaire en toute impunité, et ne pas avoir à vous soucier de mélanger vos types de voiture.

Vous pouvez regarder les drapeaux d'option de internal dans les fusionner configuration docs aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top