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.


CategoryCzech CategoryCzech