Transplantacijos naudojimo pasekmės Mercurial

Neseniai buvo keletas klausimų, susijusių su pakeitimų praleidimu, išlaikant „Mercurial“ filialus. Pavyzdžiui:

Kadangi jis buvo įvestas 2.0 versijoje, man įdomu, kaip naudoti graft kad būtų išvengta šios problemos. Atsižvelgiant į pokyčių medį taip:

 A---B---C---D---E---F---G---H---I---J 

Tarkime, mes turime sukurti išleidimo šaką, kuri praleidžia blogio pasikeitimą E

 hg update -r D hg graft "F::J" 

suteikia mums:

 A---B---C---D---E---F---G---H---I---J \ --F'--G'--H'--I'--J' 
  • K1: Kas čia nutiko? Galiu suprasti, kad transplant sukurtų pleistrus iš F::J , tada juos taikys D , bet, kaip sakoma, graft naudoja trijų pakopų, o ne pleistrų. Taigi ... kaip tai veikia? Kodėl tai geriau?

Sakykime, dabar aš išsprendžiu E ir sujungsiu jį į savo leidimo šaką.

  --E2----------------- / \ A---B---C---D---E---F---G---H---I---J---M1 \ \ --F'--G'--H'--I'--J'---------M2-- 

M1 - tiesioginis susijungimas; nieko ypatingo. M2 susieja filialus, turinčius „tuos pačius“ (arba bent jau lygiaverčius) pakeitimus.

  • Q2: Ar ji tiesiog sujungia įprastą trišalį susijungimą su D , J' ir M1 ?
  • 3 klausimas: Ar Mercury saugo / naudoja papildomą informaciją apie transplantacijos operaciją, kad padėtų jai sujungti?

Ir pagaliau ...

  • K4: Kokios galimos tokios srauto problemos?
97
07 марта '12 в 12:24 2012-03-07 12:24 Paulius S įvyks kovo 12 d. 12 val. 12:24 2012-03-07 12:24
@ 2 atsakymai

Atnaujinus į D ir transplantatą F::J , Mercurial veikia keliose susijungimuose. Ji prasidės nuo šio susijungimo:

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

Jei rašome +d delta tarp C ir D , tada pradėsime nuo:

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

Pasukite diagramą 90 laipsnių kampu pagal laikrodžio rodyklę, o aukščiau paminėtas trijų rūšių jungimas atrodo taip:

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

Tai yra, mes apsimeta, kad mes pradėjome su E ir -e priešingumą -e eiti į D Manau, atvirkštinis pleistras +e . Nuo E , mes taip pat persijungėme į F būseną su normaliu delta +f . Nėra nieko keisto čia - mes jau turime visas valstybes ( D , E ir F ) saugykloje. Taigi akivaizdu, kad galime sujungti D ir F

Susijungimas yra „deimantų užbaigimo“ klausimas. Taigi, randame naują būseną M , kuri yra D ir F derinys, o skirtumas nuo D iki M panašus į +f , o skirtumas nuo F iki M panašus į -e . Tai atrodo taip:

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

Delta +f tapo +f' , o delta -e tapo -e' . Tai tik normalus trijų pakopų susiliejimas, tačiau poveikis yra įdomus: mes vietoj „ E taikėme „ F .

Po sujungimo, antrasis pagrindinis elementas M - F nukrenta:

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

Norėdami pakartoti: mes nukopijavome „ F “ efektą „ D , tai yra, mes nustatėme, kad +f' D +f' taikytas delta ( +f' ) D tą patį poveikį, kaip ir tada, kai +f buvo pritaikytas E Mes galime šiek tiek suderinti, kad gautume:

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

Todėl F įdedamas į D naudojant visą trišalį mechanizmą.

  • K1: Kas čia nutiko? Taigi ... kaip tai veikia? Kodėl tai geriau?

    A1: susijungimas yra geresnis už pataisas, nes sujungimo mechanizmas priima tokius dalykus kaip pervadinimas.

  • Q2: Ar tai sujungia tik įprastą trijų krypčių susijungimą naudojant D, J 'ir M1?

    A2: Taip, vakcinacija nekeičia grafiko topologijos.

  • 3 klausimas: Ar gyvsidabris išsaugo / naudoja papildomą informaciją apie transplantacijos operaciją, kad padėtų jam sujungti?

    A3: Ne.

  • K4: Kokios galimos tokios srauto problemos?

    A4: Išjungimo požiūriu, jis turėtų veikti gerai. Ji dubliuos istoriją, kuri gali supainioti žmones.

117
07 марта '12 в 19:24 2012-03-07 19:24 Atsakymą pateikė Martin Geisler kovo 12 d. 12 val. 19:24 2012-03-07 19:24

Q1: Tai padeda konfliktams. Tada galite naudoti įprastą sujungimo įrankį (man tai yra įmontuoti konfliktų žymekliai, kuriuos redaguosiu „Emacs Smerge“ režimu).

Q2: Tai yra normalus sujungimas.

3 klausimas: Ne.

K4: Manau, kad yra negraži turėti dvi beveik identiškas šakas.

6
07 марта '12 в 13:49 2012-03-07 13:49 Atsakymą pateikė Ringding kovo 7 d. 12 val. 13:49 2012-03-07 13:49

Žr. Kitus klausimus, susijusius su etikete „ arba „ Užduoti klausimą“