Vývoj a Mercurial

Verzování pomocí Mercurialu

Sepsal jsem stručně kroky pro vývoj s pomocí mercurialu. Článek nepočítá s rozšířením Flow Extension, které pokud se dodrží struktura a postup, velmi usnadňuje práci nad projektem a zařazování nových funkcí (o tom třeba někdy příště :) Pokud nevíte co je Mercurial, proč si ho vybrat a jak se dá ovládat mrkněte na článek Verzovací systémy.Všechny příkazy které zde používám se píší do příkazového řádku v daném projektu.

Tak hurá na to.

Nápověda vždy a všude

 Pokud si nebudete vědět rady každý mercurial příkaz má nápovědu /em>

hg help [prikaz] vyvolá přehledný seznam funkcí i s popisem danné funkce

Inicializace projektu

 první věc kterou je třeba udělat při vývoji s mercurialem je inicializovat repozitář
 (vytvoří adresář .hg s potřebnými metadaty pro verzování souborů)

hg init – vytvoření prázdné složky .hg
hg add – přidání sledovaných souborů do repozitáře mercurial (bez toho by mercurial nevěděl že má soubory verzovat a bylo by to jak kdyby tam nebyl)

btw. pro ignorování některých souborů nebo složek slouží soubor .hgignore – ten je vždy pouze jeden a je na stejné úrovni jako jako adresář .hg

hg commit -u uzivatel -m "zprava ke comitu"
hg push [umisteni http/ssh/local...]

Stažení projektu (CLONOVÁNÍ)

pokud je projekt vytvořen ostatní si jej mohou tzv naklonovat

hg clone [umisteni] //stáhne aktuální verzi repozitáře a zároveň „vytáhne“ aktuální verzi (aktuální verzi tedy nejnovější se říká „tip“)

Kontrola stavu projektu

kontrolou projektu zjistíme v jakém stavu jsou fyzické soubory proti repozitáři

hg log -l5 //zobrazí posledních 5 commitů do daného projektu, můžeme se podle nich orientovat v jaké fázi / stavu projekt je (například zda už jsou tam commity od kolegy apod)

hg status //zobrazí soubory, které jsou změněné proti poslednímu commitu v repozitáři, relativně vůči vybranému branchi (branch je označení pro větev)
hg summ //status working copy (faktických souborů), revize na které aktuálně soubory mám, změny souboru (přidání, smazání, změny), nové changesety v repozitáři (celkem, ne v rámci jedné větve)

hg add //pokud jsem do pracovní kopie dostal nějaké nové soubory repozitář neví co s nimi a tímto je přidám mezi sledované (pokud je tam nechci musím je vyklíčovat v .hgignore buď regularním výrazem nebo globováním)

hg remove -A //pokud jsem smazal fyzicky některé sledované soubory je třeba je odebrat z repozitáře, jinak hlásí že mu chybí, tím se vytvoří commit, který repozitáři řekne ať soubory označí jako smazaná a dále je nesleduje)

hg diff //ukáže změny v souborech pokud jsou nějaké modifikované (tzn hg status něco vypíše)

Uložení změn a odeslání „pryč“ (PUSHOVÁNÍ)

po úpravách je třeba celou práci commitnou a poslat  někam dál na server / produkcni web
nebo kolegovi který sedí vedle vás

hg st // ukáže které soubory a jak jsem změnil (M,A,R, … písmena symbolizují jak se soubor změnil)
hg commit -u uzivatel -m "zmeny ktere chci do repozitare" //uložím změny do repozitáře

hg in [umisteni] // zjistí zda na druhé straně existuje něco co bych si měl stáhnout před tím než budu pushovat

hg push [umisteni] // odeslání na požadované místo, standartně je mercurial nastaven tak, že nevytvoří nový anonymní branch v případě ze pushuju někam kde zrovna nejsem na stejné výchozí revizi … výsledek je takový že se push provede .. místo toho vyskočí hláška že je třeba přidat parametr -f, ale pak je třeba počítat s tím že na druhé straně je nezbytné udělat merge -> případně si výsledek pullnout k sobě, vyřešit lokálně merge, commitnout a vrátit zpět přes push…

Aktualizace změn na vzdálené straně (UPDATOVÁNÍ)

 je to nezbytný krok po té co jsem někam pushnul svoje změny a chci, aby se projevily
//lokalni, necommitnutné, změny na vzdálené straně by neměly být žádné

hg summ // zjištění že na nás v repozitáři čekají nějaké changesety (tedy commity které je třeba aplikovat)
hg update //update na aktualní revizi daného branche, pozor na hg update -r 123  který updatuje na zadanou revizi, ale bez vahani přepne i branch!

Jak vrátit změny když se něco nepodaří

samozřejmě verzujeme proto by jsme mohli sledovat a vracet změny :)

hg revert -r [verze]  // revert vraci zpět, zadaným parametrů
hg rollback  // vrátí zpět poslední commit
hg update -r // update na pozadovanou verzi v danem

A to je vše?

Nene.. zdaleka ne! Nenapsal nic o branchování a mergování větví což je velice důležíté. Nenapsal jsem nic o možnostech (skoro nekonečných) se souborem .hgrc, který nastavuje v mercurialu doplňky a celou řadu funkcí. Nenapsal jsem nic o hookách kterými lze na dané akce mercurialu připojovat shellové scripty atd .. je toho opravdu mnoho .. počítám, že článek budu doplňovat postupně. Cokoli by nebylo jasné či jste měli pocit, že je třeba upřesnit prosím napište do komentáře.