Conséquences de l'utilisation de la greffe dans les Mercurial
Il y ai plusieurs questions récemment sur la façon d'ignorer les changements lors de l'entretien de la libération des succursales dans d'Mercurial. Par exemple:
- Mercurial: Direction générale de changements spécifiques reviens après factice de fusion
- Pourquoi sont-Mercurial backouts dans une branche qui touchent d'autres branches?
Car il a été introduit dans la version 2.0, j'ai demandé à ce sujet à l'aide de graft
pour éviter ce problème. Compte tenu d'une révision de l'arborescence comme ceci:
A---B---C---D---E---F---G---H---I---J
Supposons que nous avons besoin de créer une branche qui ignore le Mal de changement E
.
hg update -r D
hg graft "F::J"
nous donnant:
A---B---C---D---E---F---G---H---I---J
\
--F'--G'--H'--I'--J'
- Q1: Ce qui s'est passé ici? Je peux comprendre que
transplant
aurait généré des correctifs deF::J
, puis de l'appliquer surD
, maisgraft
est dit d'utiliser les 3 voies de fusion plutôt que des correctifs. Donc....... comment cela fonctionne? Pourquoi est-il mieux?
Permet de dire que j'ai maintenant fixer E
, et le fusionner dans ma branche.
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
M1 est un droit de fusion; rien de spécial là.
M2 est la fusion de branches qui ont "la même chose" (ou au moins l'équivalent) des modifications sur.
- Q2: Est-ce de fusion juste une normale 3-voie de fusion à l'aide de
D
,J'
etM1
? - Q3: mercurial stockée ou utilisée extra d'informations sur la greffe de fonctionnement pour l'aider avec la fusion?
Et enfin...
- Q4: Quels sont les problèmes potentiels avec un débit comme cela?
Vous devez vous connecter pour publier un commentaire.
Lorsque vous mettez à jour à
D
et de la greffeF::J
, Mercurial exécute un certain nombre de fusions. Il va commencer avec cette fusion:Si nous écrire
+d
pour le delta entre les étatsC
etD
, alors nous commençons avec:Tourner le graphique de 90 degrés dans le sens horaire et les trois voies de fusion ressemble à ceci:
Qui est, nous prétendre que nous avons commencé avec
E
et appliquée à l'opposé de-e
pour se rendre àD
. Je pense qu'à l'inverse patch de+e
. Départ enE
nous sommes aussi allés à l'étatF
avec la normale delta+f
. Il n'y a rien d'étrange là — nous avons tous les etats (D
,E
, etF
) dans le référentiel déjà. Donc vu comme ça, c'est clair qu'on peut les fusionnerD
etF
.Fusion est une question de compléter "le diamant". Si nous trouvons un nouvel état
M
qui est un mélange deD
etF
et où la différence deD
àM
est similaire à+f
et la différence deF
àM
est similaire à-e
. Il ressemble à ceci:La
+f
delta est devenue+f'
et la-e
delta est devenue-e'
. C'est juste une normale trois voies de fusion, mais l'effet est intéressant: nous avons appliqué lesF
surD
au lieu deE
!Après la fusion, le deuxième parent de
M
àF
est tombée:À le répéter, Nous avons copié le "effet" de
F
surD
, qui est, nous avons trouvé un delta (+f'
) qui s'est appliqué àD
donner le même effet que lorsque+f
a été appliquée àE
. Nous pouvons redresser le graphique un peu pour obtenir:Le résultat est que
F
est greffée surD
à l'aide de la totalité des trois voies de la machinerie.Q1: Ce qui s'est passé ici? Donc....... comment cela fonctionne? Pourquoi est-il mieux?
A1: à l'Aide fusionne est mieux que les patchs depuis la fusion des machines prend les choses comme renomme en compte.
T2: Est cette fusion juste une normale 3-voie de fusion à l'aide de D, J " et M1?
A2: Oui, la greffe ne prend pas en modifier la topologie du graphe.
T3: A mercurial stockée ou utilisée extra d'informations sur la greffe de fonctionnement pour l'aider avec la fusion?
A3: Pas.
T4: Quels sont les problèmes potentiels avec un débit comme cela?
A4: à Partir d'une fusion point de vue, il doit travailler bien. Il va dupliquer une partie de l'histoire qui pourrait être source de confusion pour les gens.
D
etE
. -> ne devrait-ce pas êtreD
etF
? Si nous trouvons un nouvel étatM
qui est un mélange deD
etE
-> ne devrait-ce pas êtreD
etF
ainsi?Q1: Il aide quand il y a des conflits. Vous pouvez utiliser votre habitude outil de fusion puis (pour moi, c'est inline marqueurs de conflit, qui je l'ai modifier avec Emacs' smerge-mode).
Q2: C'est une étape normale de fusion.
T3: Non.
Q4: je pense que c'est laid d'avoir deux branches identiques.