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ą

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

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"