== Pirmasis mūsų pakeitimas == ''(šis puslapis - viena iš [[LithuanianTutorial]] įvado dalių. Ankstesnė dalis - [[LithuanianTutorialHistory]], kita dalis - [[LithuanianTutorialShareChange]])'' Esame savo sukurtoje `mano-hello` saugykloje. Viena iš nerašytų efektyvaus darbo su Mercurial taisyklių - tai izoliuoti susijusius pakeitimus, juos perkeliant į atskirą saugyklą ([[Repository]]). Taip nesusijęs kodas neįsimaišo tarp mums rūpimų pakeitimų, todėl yra daug lengviau po vieną testuoti individualias atlikto darbo dalis. Taigi pradėkite laikydamiesi šio darbo su Mercurial modelio. Mūsų labai paprastas tikslas yra pakeisti programą "hello-world", kad ji išvestų papildomą eilutę. Visų pirma, sukuriame naują saugyklą, pavadintą `mano-hello-nauja-eilute`, šiam mažam projektui tiesiog klonuodami (`clone`) mūsų dabartinę saugyklą `mano-hello` (Mercurial 1.0). {{{ $ hg clone mano-hello mano-hello-nauja-eilute updating working directory 2 files updated, 0 files merged, 0 files removed, 0 files unresolved }}} Atkreipkite dėmesį, kad savo naujai saugyklai mes suteikėme pavadinimą, apibūdinantį jos paskirtį. Kadangi saugyklų klonavimas Mercurial sistemoje yra pigus kompiuterio resursų prasme, pas mus greitai atsiras daug šiek tiek tarpusavyje besiskiriančių saugyklų. Jeigu šios naujos saugykloms nesuteiktume jų turinį aprašančių vardų, tai greitai pasimestume jų gausoje ir negalėtume atskirti vienos nuo kitos. Dabar naujoje saugykloje atliksime pirmąjį pakeitimą. Pereikime į saugyklos darbinį katalogą ([[WorkingDirectory]]) - tai paprasčiausiai tas katalogas, kuriame yra visi failai - ir modifikuokime programos kodą su tekstiniu redaktoriumi. Visą tai galime atlikti tame pačiame konsolės lange, naudodami {{{edit}}} Windows sistemoje arba {{{vi}}} Unix šeimos sistemose. Be abejo, saugyklos katalogą galime pasiekti ir grafinės sąsajos pagalba (pvz.: Windows Explorer), o programos failą atsidaryti su mums įprastu tekstiniu redaktoriumi (pvz.: Notepad) arba specialiu tos programavimo kalbos redaktoriumi: {{{ $ cd mano-hello-nauja-eilute $ edit hello.c }}} `hello.c` failo turinys iš pradžių atrodo taip: {{{#!cplusplus numbers=off /* * 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"); return 0; } }}} Pakeiskime funkciją {{{main}}}, kad ji spausdintų vieną papildomą eilutę: {{{#!cplusplus numbers=off (...) int main(int argc, char **argv) { printf("hello, world!\n"); printf("Man patinka naudotis Mercurial!\n"); return 0; } }}} Atlikę ir išsaugoję pakietimus, tiesiog uždarome naudotą tekstinį redaktorių. Štai ir viskas. Dabar jau esame pasiruošę sukurti savo pakeitimų rinkinį ([[ChangeSet]]). O jeigu mums kas nors sutrukdė ir mes pamiršome, kokie pakeitimai sudarys pakeitimų rinkinį, kai jį sukursime? Tokiu atveju naudojame `status` komandą. {{{ $ hg status M hello.c }}} Išvesta informacija nėra vaizdi, tačiau raidė `M` paprasčiausiai rodo, kad failas `hello.c` buvo modifikuotas ir bus įtrauktas į pakeitimų rinkinį. Vietoj `hg status` mes galime parašyti tiesiog `hg st`, nes Mercurial leidžia trumpinti komandų pavadinimus, jeigu įvesta simbolių seka netampa dviprasmiška. {{{ $ hg st M hello.c }}} Taip pat galime pamatyti konkrečius programos faile padarytus pakeitimus, naudodami `diff` komandą: {{{ $ hg diff diff -r 82e55d328c8c hello.c --- a/hello.c Fri Aug 26 01:21:28 2005 -0700 +++ b/hello.c Mon May 05 00:27:56 2008 +0200 @@ -12,5 +12,6 @@ int main(int argc, char **argv) { printf("hello, world!\n"); + printf("Man patinka naudotis Mercurial!\n"); return 0; } }}} Jeigu norime panaikinti padarytus pakeitimus ir pradėti iš naujo, galime naudoti `revert` komandą, kuri `hello.c` failą atstatytų į pradinę, nemodifikuotą būseną (papildomas `--all` parametras į pradinę būseną grąžintų visus failus). Prieš naudodami šią komandą, tiesiog įsitikinkite, kad būtent tai ir norite padaryti. {{{ $ hg revert hello.c }}} `revert` modifikuotą failą `hello.c` pervadina į `hello.c.orig` ir atkuria pradinį nemodifikuotą `hello.c`. `status` dabar rodo, jog `hello.c.orig` failas nėra stebimas (tai žymima "?" simboliu). {{{ $ hg st ? hello.c.orig }}} Jeigu vėl persigalvojame ir norime pakartoti pašalintą pakeitimą, tiesiog ištriname nemodifikuotą `hello.c` failą ir modifikuotą `hello.c.orig` pervadiname atgal į `hello.c`. {{{ $ rm hello.c $ mv hello.c.orig hello.c $ hg st M hello.c }}} Pakeitimų rinkinio sukūrimas vadinamas jo patvirtinimu. Mes atliekame patvirtinimą, naudodami `commit` komandą. `commit` turi gražų trumpą sinonimą `ci`, kurį taip pat galime naudoti: {{{ $ hg ci }}} Ši komanda atidarys teksto redaktoriaus langą, kuriame jau bus įrašytos kelios eilutės. ''Svarbu:'' Numatytasis teksto redaktorius Windows sistmoje yra Notepad, o Unix šeimos sistemose - vi (tai galima pakeisti naudojant `EDITOR` arba [[HGEDITOR]] aplinkos kintamuosius). {{{ HG: Enter commit message. Lines beginning with 'HG:' are removed. HG: -- HG: user: mpm@selenic.com HG: branch 'default' HG: changed hello.c }}} Pirma eilutė yra tuščia, o tolimesnės eilutės aprašo naudotoją, šakos pavadinimą ir failus, kurie bus įtraukti į pakeitimų rinkinį. Numatytasis šakos pavadinimas yra "default" (žr. NamedBranches). Numatytoji "user" (naudotojo) reikšmė paimama iš {{{~/.hgrc}}} konfiguracijos failo "ui" skilties, "username" eilutės (žr. [[http://www.selenic.com/mercurial/hgrc.5.html#ui|hgrc(5)]]) . Kitą naudotojo vardą taip pat galima įrašyti ir naudojant parametrą -u po komandų `commit` bei `ci`. Norėdami patvirtinti pakeitimų rinkinį, turime nurodyti jo paskirtį (žr. [[ChangeSetComments]]). Taigi parašykime ką nors tokio: {{{ Mokausi naudotis Mercurial ir man gerai sekasi HG: Enter commit message. Lines beginning with 'HG:' are removed. HG: -- HG: user: mpm@selenic.com HG: branch 'default' HG: changed hello.c }}} Dabar išsaugome tekstą ir uždarome redaktorių. Jeigu viskas pavyko, tuomet `commit` komanda baigs darbą ir neišves jokio pranešimo. Jeigu uždarysite radaktorių, neišsaugoję naujo teksto, arba nieko jame neįrašysite, tada `commit` atšauks šią operaciją - taigi prieš patvirtindami pakeitimų rinkinį dar galite persigalvoti. Pažiūrėkime, ką dabar mums parodys `status` komanda: {{{ $ hg st }}} Ogi nieko! Mūsų padarytas pakeitimas buvo įtrauktas į pakeitimų rinkinį, todėl šiuo metu daugiau nebėra modifikuotų failų, kuriuos reikėtų įtraukti į rinkinį. Mūsų saugyklos viršūnė dabar sutampa su darbinio katalogo turiniu. `parents` komanda mums parodo, kad saugyklos darbinis katalogas dabar yra sinchronizuotas su naujai patvirtintu pakeitimų rinkiniu (čia turime tik vieną pakeitimų rinkinio tėvą, nes kątik buvo patvirtintas naujas pakeitimų rinkinys. Du tėvai atsiranda po pakeitimų rinkinių suliejimo - TutorialMerge): {{{ $ hg parents changeset: 2:86794f718fb1 tag: tip user: mpm@selenic.com date: Mon May 05 01:20:46 2008 +0200 summary: Mokausi naudotis Mercurial ir man gerai sekasi }}} Na va, mes patvirtinome naują pakeitimų rinkinį. Dabar galime panagrinėti savo darbo pakeitimų istoriją: {{{ $ hg log changeset: 2:86794f718fb1 tag: tip user: mpm@selenic.com date: Mon May 05 01:20:46 2008 +0200 summary: Mokausi naudotis Mercurial ir man gerai sekasi (...) }}} ''Svarbu:'' Jūsų įvestas naudotojas, data ir pakeitimų rinkinio ID ([[ChangeSetID]]) aišku bus kitokie. Kaip jau išsiaiškinome anksčiau ([[LithuanianTutorialClone]]), naujas pakeitimų rinkinys egzistuoja tik šioje saugykloje. Tai labai svarbus Mercurial sistemos veikimo principas. Toliau mokysimės, kaip pakeitimus iš vienos saugyklos galima pervesti į kitą - [[LithuanianTutorialShareChange]]. ---- CategoryTutorial