Mercurial (DVKS)
Mercurial – Decentralizuota Versijų Kontrolės Sistema.
Kas yra Decentralizuota versijų kontrolės sistema?
[keisti]Decentralizuota versijų kontrolės sistemos atsirado nesenai ir tai yra naujas požiūris į failų versijų kontrolę. Decentralizuotos reiškia tai, kad kiekvienas versijuojamos failų saugyklos turėtojas, turi pilna versijų istoriją ir nėra jokio centrinio serverio.
Diegimas
[keisti]Paprasčiausias būdas gauti naujausią Mercurial versiją – setuptools paketo komandos easy_install naudojimas:
# easy_install mercurial
Konfigūravimas
[keisti]Prieš pradedant naudoti Mercurial, rekomenduojama susikurti konfigūracinį failą, kuris atrodo taip: ~/.hgrc
[ui]
# Jūsų vardas ir el. pašto adresas
username = Vardenis Pavardenis <vardenis@pavardenis.lt>
# Programa, kurios pagalba bus atliekas kodo suliejimas
# meld yra tik pavyzdys, galite naudoti, bet kurią kitą.
merge = meld
# Mercurial praplėtimai
[extensions]
# Galimybė naudoti išorinę programą, pakeitimų atvaizdavimui.
hgext.extdiff =
# Komanda purge, kurios pagalba galite pašalinti visus nereikalingus failus iš saugyklos.
hgext.purge =
# Jūsų asmeninių pakeitimų perstūmimas atsinaujinant, kad būtų išlaikytas linijinis keitimų medis.
hgext.rebase =
# Spalvotas išvedimas.
hgext.color =
# Parametrai, keitimų peržiūros programoms.
[extdiff]
# Nurodoma, kad pakeistų failų peržiūrai bus naudojama programa meld.
cmd.vdiff = meld
# Nustatomi standartiniai parametrai įvairioms komandoms.
[defaults]
# Riboti keitimų istorijos išvedimą, iki 4 paskutinių keitimų.
# Be šio parametro, bus išvedama visa istorija.
log = --limit 4
Naujos saugyklos kūrimas
[keisti]$ hg init mano_saugykla
Naujų failų įtraukimas
[keisti]Visų naujų failų įtraukimas:
$ hg add
Konkretaus failo ar katalogo įtraukimas:
$ hg add failas.txt
Nepageidaujamų failų ignoravimas
[keisti]Dažnai pasitaiko, kad darbiniame kataloge dėl įvairių priežasčių laikomi failai, kurių nenorima įtraukti į versijų kontrolę. Šiai problemai spręsti naudojamas failas .hgignore esantis šakniniame saugyklos kataloge:
syntax:regexp # Ignoruojami visi failai, kurių galūnė baigiasi ''.bak'' *\.bak$ # Ignoruojamas katalogas ''tmp'' ir viskas jo turinys. ^tmp$ # Ignoravimas visų failų, esančių kataloge ''x'', išskyrus vieną ''mano_failas.txt'': ^x/(?!mano_failas\.txt)$
Tušti katalogai
[keisti]Kadangi Mercurial dirba tik su failais, tai tuščius katalogus paprasčiausiai ignoruoja. Jei dėl įvairių priežasčių, norite į saugyklą įtraukti tuščius katalogus, reikia kiekviename tokiame tuščiame kataloge sukurti failą .empty-folder (failo pavadinimas gali būti ir kitoks) ir įtraukti tą failą į saugyklą.
Pakeitimų fiksavimas
[keisti]$ hg ci -m "Trumpa informacija apie tai, kas buvo keista."
Pastaba: po šios komandos, pakeitimai bus išsaugoti jūsų asmeninėje saugykloje. Jei dirbate komandoje ir turite bendrą saugyklą, per kurią visi dalinasi savo pakeitimais, tuomet skaitykite toliau, kaip apsikeisti pakeitimų istorija, su išorinėmis saugyklomis.
Informacija apie saugyklos būklę
[keisti]Dirbdami su savo saugykla, bet kuriuo metu galite sužinoti apie jos būklę, šios komandos pagalba:
$ hg status
Prieš vykdant apsikeitimo su išorinėmis saugyklomis operacijas, patartina naudoti šias būklės komandas:
$ hg in
... bus pateiktas sąrašas keitimų, kurie yra išorinėje saugykloje ir kurių neturite jūs
$ hg out
... bus patiktas sąrašas keitimų, kuriuos turite jūs, bet kurių nėra išorinėje saugykloje
Darbas su išorinėmis saugyklomis
[keisti]Keitimų istorijos apsikeitimams naudojamos dvi komandos:
- pull – pasiimti naujausius keitimus iš išorinės saugyklos
- push – išsiųsti naujausius keitimus į išorinę saugyklą
pull
[keisti]Jei jūsų asmeninėje saugykloje nebuvo daryta jokių pakeitimų, tuomet, galite paprasčiausiai atsinaujinti taip:
$ hg pull
Jei atlikote pakeitimus, kuriais nesidalinote su jokiomis išorinėmis saugyklomis, tuomet galite atsinaujinti taip:
$ hg pull --rebase
Jei atlikote pakeitimus, kuriais pasidalinote bent su viena išorine saugykla, tuomet atsinaujinant jums reikės sulieti savo pakeitimų istoriją, su kitų saugyklų pakeitimais:
$ hg pull $ hg merge $ hg ci -m "Suliejimas"
Pastaba: Atlikus tokį atnaujinimą, pakeitimų istoriją keliauja į jūsų asmeninę saugyklą, tačiau ne į jūsų darbinę aplinką. Norėdami atsinaujinti savo darbinę aplinką, turite naudoti šią komandą:
$ hg up
Arba atnaujinant galite naudoti parametrą -u, tuomet bus parsiųsti visi pakeitimai ir kartu atnaujinti darbiniai failai.
$ hg pull -u
push
[keisti]Prieš siunčiant savo pakeitimus į kitą saugyklą, būtina prieš tai atsisiųsti tos saugyklos keitimų istoriją, į kurią bus siunčiami jūsų pakeitimai. Atsinaujinti, galima pull komandos pagalba, kurios naudojimas aprašytas aukščiau.
Norint nusiųsti savo pakeitimus į kitą išorinę saugyklą, reikia naudoti šią komandą:
$ hg push
Saugyklos šakojimas
[keisti]Saugyklos šakojimas taikomas šiais atvejais:
- Senu versijų palaikymui
- Naujų funkcijų vystymui, netrukdant pagrindinei programavimo šakai.
Mercurial, pagal nutylėjimą naudoja šaką, pavadinimu default, ši šaka yra pagrindinė linija, kurioje turėtu būti laikomas naujausias stabilus kodas.
Naujos šakos kūrimas
[keisti]$ hg branch 1.0 $ hg ci -m "Nauja šaka: 1.0"
Persijungimas tarp šakų
[keisti]Grįžimas į default šaką:
$ hg up -c default
Grįžimas į 1.0 šaką:
$ hg up -c 1.0
Blogų keitimų šalinimas
[keisti]Jei keitimų istorijoje randate vieną blogą keitimą (angl. changeset), tuomet jį galite atstatyti taip:
$ hg up -c <blogo keitimo id> $ hg revert -ar <parent id> $ hg ci -m "Atstatomas blogas keitimas" $ hg up -c default $ hg merge <atstatyto keitimo id> $ hg ci -m "Atstatytas blogas keitimas, prijungtas prie pagrindinės šakos"