98 votes

Conséquences de l’utilisation de greffon dans Mercurial

Il y a eu 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:

Depuis, elle a été introduite dans la version 2.0, j'ai demandé à ce sujet à l'aide de graft afin d'é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"

en 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 qu' transplant aurait généré des correctifs de F::J, puis de l'appliquer sur D, mais graft est dit d'utiliser les 3 voies de fusion plutôt que des correctifs. Donc....... comment cela fonctionne? Pourquoi est-il mieux?

Disons 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--

Le M1 est un droit de fusion; rien de spécial. M2 est la fusion de branches qui ont "la même chose" (ou au moins l'équivalent) des changements.

  • Q2: Est-ce de fusion juste une normale 3-voie de fusion à l'aide de D, J' et M1?
  • Q3: A 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 de ce genre?

119voto

Martin Geisler Points 44779

Lorsque vous mettez à jour à l' D et le greffon F::J, Mercurial exécute un certain nombre de fusions. Il va commencer avec cette fusion:

M = three_way_merge(local=D, other=F, base=E)

Si nous écrivons +d pour le delta entre les etats de l' C et D, alors nous commençons avec:

        +d     +e     +f
---- C ---- D ---- E ---- F ----

Tournez le graphique de 90 degrés dans le sens horaire et les trois voies de fusion ressemble à ceci:

    -e  
  .---- D
 /
E
 \
  '---- F
    +f

C'est, nous prétendre que nous avons commencé avec l' E et appliquée à l'opposé de -e pour obtenir d' D. Je pense qu'à l'inverse patch de +e. Départ en E nous sommes aussi allés à l'état F à la normale du delta +f. Il n'y a rien d'étrange là - nous avons tous les etats (D, E, et F) dans le référentiel déjà. Donc vu comme ça, c'est clair qu'on peut les fusionner D et F.

La fusion est une question de compléter "le diamant". Nous avons donc trouver un nouvel état d' M qui est un mélange de D et F et où la différence de D de M est similaire à l' +f et la différence de F de M est similaire à l' -e. Il ressemble à ceci:

    -e     +f'
  .---- D ----.
 /             \
E               M
 \             /
  '---- F ----'
    +f     -e'

L' +f delta est devenue +f' et de la -e delta est devenue -e'. C'est juste une normale trois voies de fusion, mais l'effet est intéressant: nous avons appliqué F sur D au lieu de E!

Après la fusion, le deuxième parent de l' M de F est tombée:

    -e     +f'
  .---- D ----.
 /             \
E               M
 \
  '---- F
    +f

Je le répète: Nous avons copié le "effet" de F sur D, qui est, nous avons trouvé un delta (+f') appliquées à l' D donner le même effet que lorsque +f a été appliqué à l' E. Nous pouvons redresser le graphique un peu pour obtenir:

       +f'
--- D ---- M
     \
      '---- E ---- F
        +e     +f

Le résultat est qu' F est greffée sur D utilisation totale de trois machines.

  • 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.

  • Q2: Est-ce de 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.

  • Q3: A mercurial stockée ou utilisée extra d'informations sur la greffe de fonctionnement pour l'aider avec la fusion?

    A3: Aucun.

  • Q4: Quels sont les problèmes potentiels avec un débit de ce genre?

    A4: à Partir d'une fusion point de vue est doit travailler bien. Il va dupliquer une partie de l'histoire qui pourrait être source de confusion pour les gens.

6voto

Ringding Points 2400

Q1 : Elle aide quand il y a des conflits. Vous pouvez utiliser votre outil de fusion habituelle puis (pour moi c’est de marqueurs de conflit inline, que j’ai modifier avec smerge mode Emacs).

Q2 : C’est une fusion normale.

Q3 : no

Q4 : Je pense que c’est laid d’avoir deux branches presque identiques.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X