Saugyklos pakeitimų istorija
(šis puslapis - viena iš LithuanianTutorial įvado dalių. Ankstesnė dalis - LithuanianTutorialClone, kita dalis - LithuanianTutorialFirstChange)
Taigi, pasinaudoję clone komanda, mes klonavome saugyklą (Repository) ir dabar turime tikslią jos kopiją, pavadintą mano-hello.
Peržiūrėkime šios saugyklos istoriją. Tam naudosime komandą log. Bus parodytas visų šioje saugykloje įvykdytų veiksmų sąrašas, pradedant nuo naujausių ir baigiant pačia pirma saugykloje atlikta operacija.
$ hg log changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile changeset: 0:0a04b987be5a user: mpm@selenic.com date: Fri Aug 26 01:20:50 2005 -0700 summary: Create a standard "hello, world" program
Išsiaiškinkime, ką reiškią šios išvestos eilutės:
Kiekvienas paragrafas aprašo atskirą pakeitimų rinkinį (ChangeSet). Pakeitimų rinkinys - tai vieno ar kelių failų pakeitimai, sugrupuoti į vieną loginį elementą.
- Mūsų atveju viršuje matome, kad saugyklos istorija susideda iš dviejų pakeitimų rinkinių.
changeset rodo pakeitimų rinkinį.
Pirmas skaičius prieš dvitaškį nurodo versijos (revizijos) numerį (RevisionNumber) - jis skirtas vietiniam pakeitimų rinkinio identifikavimui. Šis numeris galioja tik saugyklos viduje.
Šešioliktainė eilutė po dvitaškio - tai trumpos formos pakeitimų rinkinio ID (changeset ID). Jis tiksliai įvardina pakeitimų rinkinį ir yra toks pat visose saugyklose, kuriose šis rinkinys yra. Jeigu su kuo nors kalbate apie pakeitimų rinkinį, naudokite šį ID, o ne versijos numerį.
tag yra žymė (Tag), sutartinis simbolinis vardas, suteiktas pakeitimų rinkiniui.
Bet kuriam pakeitimų rinkiniui galima priskirti vieną ar kelias žymes. Tačiau nedaug pakeitimų rinkinių turi jiems priskirtas žymes, taigi tag eilutės dažnai nebus.
Speciali žymė, pavadinta tip, visada reiškia viršūnę - t.y. patį naujausią saugyklos pakeitimų rinkinį. Jeigu sukursite kitą pakeitimų rinkinį (mes netrukus tai padarysime), tip žymė bus pašalinta iš dabartinės viršūnės ir suteikta naujam pakeitimų rinkiniui.
user nurodo pakeitimų rinkinio autorių. Tai laisvos formos eilutė, kurioje dažniausiai yra elektroninio pašto adresas, o kartais ir asmens vardas.
date nurodo pakeitimų rinkinio sukūrimo datą. Šios datos įrašomos tokiu laiko juostos formatu, kokį naudojo pakeitimų rinkinio autorius.
summary pateikia pirmą pakeitimų rinkinio aprašo eilutę, kurią įvedė pakeitimų rinkinio autorius, kad padėtų sau ir kitiems vėliau greitai suprasti pakeitimų rinkinio paskirtį.
parent nurodo pakeitimų rinkinio tėvus, jeigu jų yra daugiau nei vienas, o taip atsitinka, kai suliejami (Merge) pakeitimai iš kelių vietų.
- Dažniausiai būna tik vienas tėvas - tai senesnis pakeitimų rinkinys, einantis iš karto po mūsų nagrinėjamo. Taip yra ir mūsų pavyzdyje viršuje.
Detalesnę saugyklos istorijos informaciją galima sužinoti pasinaudojus išplėstine išvestimi su parametru -v, arba globaliu --debug parametru, kuris parodys viską ką turi:
$ hg log -v changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 files: Makefile description: Create a makefile (...) $ hg log --debug changeset: 1:82e55d328c8ca4ee16520036c0aaace03a5beb65 tag: tip parent: 0:0a04b987be5ae354b710cefeba0e2d9de7ad41a9 parent: -1:0000000000000000000000000000000000000000 manifest: 1:0c7c1d435e6703e03ac6634a7c32da3a082d1600 user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 files+: Makefile extra: branch=default description: Create a makefile (...)
Išplėstinė išvestis turi keletą naujų eilučių, palyginus su standartine.
files išvardina failus, kurie buvo modifikuoti šiame pakeitimų rinkinyje.
description turi pilną pakeitimų rinkinio aprašymą, o ne tik pirmą jo eilutę.
- Mūsų atveju, aprašymai yra vienos eilutės ilgio, todėl čia skirtumo nesimato.
--debug išvestis prie išplėstinės prideda šias papildomas eilutes (žr. DebuggingFeatures):
changeset dabar rodo nesutrumpintą pakeitimų rinkinio ID.
dvi parent eilutės, kuriose pateikiami abiejų šio pakeitimų rinkinio tėvų ID. Čia -1:0000000000000000000000000000000000000000 reiškia neegzistuojantį tėvą.
manifest parodo manifesto (saugykloje esančių failų ir jų versijų aprašymo) ID šiam pakeitimų rinkiniui.
file+ išvardina failus, kurie buvo pridėti šiame pakeitimų rinkinyje.
file- išvardina failus, kurie buvo pašalinti šiame pakeitimų rinkinyje.
Komanda log turi -r parametrą atskirų pakeitimų rinkinių peržiūrėjimui.
$ hg log -r1 changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile
nurodant -r parametrą galima naudoti labai lanksčią sintaksę, norint pasirinkti kelių pakeitimų rinkinių grupę. Dėl mažo pakeitimų rinkinių skaičiaus mūsų saugykloje, dabar to pademonstruoti negalime. Daugiau informacijos rasite žinyno puslapyje.
Taip pat galima pridėti parametrą -p - bus parodytos ir su pakeitimų rinkiniu susijusios atskiros failų modifikacijos:
$ hg log -r1 -p changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile diff -r 0a04b987be5a -r 82e55d328c8c Makefile --- /dev/null Fri Aug 26 01:20:50 2005 -0700 +++ b/Makefile Fri Aug 26 01:21:28 2005 -0700 @@ -0,0 +1,1 @@ +all: hello
Galime naudoti ir tip komandą, kad pamatytume informaciją apie viršūnę, t.y. naujausią pakeitimų rinkinį. tip komanda - tai trumpesnė log -r tip alternatyva.
$ hg tip changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile $ hg log -r tip changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile
Jau žinome, kas yra mūsų saugykloje, ir kaip tai buvo sukurta, taigi keliaukime į LithuanianTutorialFirstChange ir padarykime keletą pakeitimų patys!