== Konfliktinių suliejimų valdymas == ''(šis puslapis - viena iš [[LithuanianTutorial]] įvado dalių. Ankstesnė dalis - [[LithuanianTutorialMerge]], kita dalis - [[LithuanianTutorialConclusion]])'' Praeitame skyrelyje susipažinome su paprastais suliejimais ([[Merge]]). Mercurial sistema taip pat atlieka ir sudėtingesnius suliejimus. Ne taip jau retai atsitinka, kad du žmonės pakeičia tas pačias failo eilutes, ir tada turi nuspręsti, ką toliau daryti. Tokios situacijos vadinamos [[Conflict|konfliktais]], o tinkamos išeities radimas vadinamas konflikto išsprendimu (''resolve''). Iš pradžių suskurkime dirbtinę konfliktinę situaciją. Kaip jau ne kartą darėme anksčiau, visų pirma, klonuokime {{{mano-hello}}} saugyklą: {{{ $ cd .. $ hg clone mano-hello mano-hello-konfliktas updating working directory 2 files updated, 0 files merged, 0 files removed, 0 files unresolved }}} Dabar į {{{hello.c}}} failą įrašykime naują eilutę: {{{ $ cd mano-hello-konfliktas $ edit hello.c }}} {{{main}}} funkciją pakeičiame taip: {{{#!cplusplus numbers=off int main(int argc, char **argv) { printf("hello, world!\n"); printf("Man nepatinka konfliktai...\n"); return 0; } }}} Patvirtiname ([[Commit]]) pakeitimą: {{{ $ hg commit -m "Konfliktinis suliejimas" }}} Prisiminkime, kad mokydamiesi atlikti mūsų primąjį pakeitimą {{{mano-hello-nauja-eilute}}} saugykloje sukūrėme pakietimų rinkinį ([[ChangeSet]]), kuris ''taip pat'' pridėjo antrą išvesties eilutę į `hello.c` failą. Kas nutiks, kai pabandysime tą pakeitimų rinkinį įkelti į dabartinę {{{namo-hello-konfliktas}}} saugyklą? {{{ $ hg pull ../mano-hello-nauja-eilute pulling from ../mano-hello-nauja-eilute searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) }}} Kol kas viskas gerai. Pabandykime atnaujinti ([[Update]]) darbinį katalogą: {{{ $ hg update abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes }}} Kaip ir praeitame skyrelyje, dabar turime atlikti suliejimą, naudodami komandą {{{merge}}}. Tačiau Mercurial negalės automatiškai sulieti pakeitimų, nes to pačio failo ta pati eilutė buvo ''skirtingai'' modifikuota dviejuose pakeitimų rinkiniuose (viename, kurį kątik patvirtinome, ir kitame, kurį įtraukėme). {{{ $ hg merge }}} Kas nutinka šiuo momentu, priklauso nuo to, kaip sukonfiguruota Mercurial sistema jūsų kompiuteryje (žr. [[MergeToolConfiguration]]). Standartiškai, Mercurial į bandomą sulieti failą įterpia specialius žymeklius, rodančius konfliktines eilutes: {{{ /* * hello.c * * Placed in the public domain by Bryan O'Sullivan * * This program is not covered by patents in the United States or other * countries. */ #include int main(int argc, char **argv) { printf("hello, world!\n"); <<<<<<< local printf("Man nepatinka konfliktai...\n"); ======= printf("Man patinka naudotis Mercurial!\n"); >>>>>>> other return 0; } }}} Kai ir anksčiau, modifikuotus failus galime pamatyti pasinaudoję `status` komanda. Prieš įterpdama konfliktinių eilučių žymeklius, Mercurial sistema išsaugojo originalaus failo kopiją (t.y. failo būseną, kuri buvo prieš atliekant suliejimą): {{{ $ hg status M hello.c ? hello.c.orig }}} Norėdami išspręsti konfliktą, `hello.c` failą atsidarome teksto redaktoriuje, ištriname Mercurial įterptus žymeklius ir "Man nepatinka konfliktai...\n" eilutę, palikdami tik anksčiau pridėtą eilutę "Man patinka naudotis Mercurial!\n". Tada galime išsaugoti pakeitimus ir uždaryti teksto redaktorių. Tada Mercurial sistemai pranešame, kad išsprendėme konfliktą, naudodami komandą {{{resolve}}}: {{{ $ hg resolve -m hello.c }}} Mercurial čia nerodo jokios išvesties. Kaip visada, nepamirškime atlikę suliejimą patvirtintį naują pakeitimų rinkinį: {{{ $ hg commit -m "Sulieti pakeitimai is mano-hello-nauja-eilute" }}} Čia matėme standartinį Mercurial elgesį, valdant konfliktinius suliejimus. Jeigu norite, galite nustatyti Mercurial taip, kad automatiškai būtų atidaromas teksto redaktoriaus langas. Taip pat galima automatiškai iškviesti ir išorinius trišalius suliejimų įrankius. Plačiau apie šias galimybes - [[MergeToolConfiguration]]. Išmokome susidoroti ir su sudėtingomis suliejimų situacijomis. Toliau - baigiamoji dalis [[LithuanianTutorialConclusion]]. ---- CategoryTutorial