Decentralizovaný model Mercurialu může být pro nového uživatele matoucí. Tato stránka se pokouší osvětlit některé z jeho základních pojmů.
Podrobnější instrukce viz CzechTutorial.
(Translations: Brazilian Portuguese, Chinese, Czech, French, German, Italian, Japanese, Korean, Russian, Spanish, Thai )
<<Seznam>>
Co je repozitář
Termín repozitář má dva významy. V užším smyslu to je složka .hg v adresáři projektu. V šírším smyslu to je úložný prostor pro zaznamenávání změn. Soubory a složky měněných souborů jsou přítomny či nepřítomny v adresáři projektu, neboli v pracovním adresáři. Obsah pracovního adresáře se mění podle nastavené aktuální revize:
Repozitář obsahuje úplnou historii projektu. Na rozdíl od tradičních SCM, kde existuje pouze jedna centrální kopie této historie, má každý pracovní adresář v Mercurialu svou vlastní kopii. To umožňuje paralelní vývoj projektů.
Pracovní adresář tedy obsahuje editovatelné kopie souborů, odpovídající zadané aktuální revizi - včetně souborů ignorovaných.
Předávání změn
Provedením příkazu commit se změny v aktuálním pracovním adresáři zapíší do nového changesetu (neboli nové revize). Změny se vztahují k rodičovské revizi:
Výše uvedená ilustrace není příliš ilustrativní. Vězme, že revize 4 byla vytvořena po revizi 3 jako větvení revize 2, jež byla při vzniku revize 4 aktuální. Revize 2 je rodič revizí 3 a 4.
Revize, changesety, čela a tip
Mercurial sdružuje provedené změny do atomických (nedělitelných) changesetů, které jsou revizemi v rámci jednoho repozitáře. Každému changesetu je přiřazeno pořadové číslo revize. Protože Mercurial umožňuje rozptýlený paralelní vývoj projektů, bývají tato čísla v různých repozitářích různá. Kromě lokálních pořadových čísel má každá revize také globální ID changesetu. Jsou to čtyřicetimístná hexadecimální čísla, jež mohou být zkrácena na libovolně krátký počet znaků s jednoznačným významem, jako např. "e38487".
Větvení a slučování se může vyskytnout kdekoliv v historii revizí. Každé rozvětvení vytváří nové čelo (head) historie. V naší ukázce jsou čely revize 5 a 6. Revize 6 je považována za tip repozitáře, čelo s nejvyšším číslem revize. Revize 4 je sloučený changeset, protože má dva rodičovské changesety (revize 2 a 3). Pracovní adresář je ve schematu uveden jenom pro úplnost; nemusí být vždy synchronizován jen s posledním changesetem.
Klonování, slučování, akce Pull a Update
Začněme s Alenkou, jejíž repozitář vypadá následovně:
Bertík si vytvoří klon tohoto repozitáře a tím získá úplnou, nezávislou lokální kopii Alenčina uložiště ve svém vlastním adresáři:
Bertík nyní nezávisle na Alence vytvoří dvě změny e,f, které potvrdí příkazem commit:
Alenka si vytvoří svou vlastní paralelní změnu g:
Nyní se Bertík synchronizuje s Alenkou pomocí příkazu pull. Tímto příkazem přitáhne všechny změny Alenčina repozitáře (zde pouze změnu g) do svého repozitáře (zatím však nezměnil svůj pracovní adresář). Protože Bertíkova změna e a Alenčina změna g mají stejného rodiče, vytvoří se za revizí d nová větev g (tip):
Bertík dále provede příkazmerge (sloučení), který spojí jeho poslední změnu (f) s tipem repozitáře. Nyní má jeho repozitář dvě rodičovské revize (f,g):
Po kontrole, že sloučení proběhlo v pořádku, vytvoří Bertík příkazem commit sloučený changeset h ve svém uložišti:
Pokud si nyní Alenka přetáhne (příkazem pull) změny od Bertíka, získá změny e,f a h:
Vězme, že provedením příkazu pull se Alenčin pracovní adresář nezměnil. Musí ještě provést příkaz update aby synchronizovala svůj pracovní adresář se staženým changesetem h (tip).
Nyní jsou Alenčin a Bertíkův repozitář opět stejné.
Decentralizovaný systém
Mercurial je decentralizovaný systém. Uživatelé si mohou zcela volně definovat své topologie pro sdílení změn (viz CommunicatingChanges):
Narozdíl od centralizovaných systémů správy verzí, u nichž experimentovámí může končit pohromou, u systémů DVCS, jako je Mercurial si prostě vytvoříme klon a experimentujeme. Pokud jsme s výsledkem spokojeni, předáme jej dál, pokud ne, můžeme klonovaný repozitář smazat a zkusit něco jiného.
Co Mercurial neumí
Mnozí uživatelé SVN/CVS mohou mylně očekávat, že lze v jednom repozitáři sledovat více projektů. Pro toto použití není Mercurial stavěn.
Pokud je nezbytně nutné hostovat více projektů v jednom místě, je možné zkusit nástroj Subrepositář, který byl zaveden v Mercurialu 1.3 nebo starší ForestExtension.
Podrobnější úvod k používání Mercurialu lze nalézt v CzechTutorial.