Differences between revisions 97 and 98
Revision 97 as of 2014-01-03 14:27:28
Size: 13272
Editor: Tovim
Comment:
Revision 98 as of 2014-01-03 14:33:27
Size: 13273
Editor: Tovim
Comment:
Deletions are marked like this. Additions are marked like this.
Line 42: Line 42:
Repozitórium je tedy vnímavý kořenový adresář projektu, který obsahuje složku '''.hg''', zvanou repozitář ([[Repository]]) a další složky a soubory, které tvoří sledovaný (pracovní kopii) i nesledovaný obsah projektu. Repozitórium je tedy vnímavý kořenový adresář projektu, který obsahuje složku '''.hg''', zvanou [[Repository|repozitář]] a další složky a soubory, které tvoří sledovaný (pracovní kopii) i nesledovaný obsah projektu.
Line 55: Line 55:
Následující ilustrace se pokouší naznačit situaci, kdy rodičovskou revizí pracovního adresáře (repozitória) je revize č. 2, uložená ve složce .hg/store. Následující ilustrace se pokouší naznačit situaci, kdy rodičovskou revizí pracovní kopie (pracovního adresáře) je revize č. 2, uložená ve složce .hg/store.

Základní pojmy Mercurialu

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ů. Postupný výklad viz Tutorial Mercurialu.

1. Pracovní adresář - repozitórium

Pracovní adresář v Mercuriálu má tyto vlastnosti:

  1. Je to adresář, ve kterém právě pracujeme a je součástí souborového systému v počítači. Od běžného pracovního adresáře se liší tím, že jeho chování je ovlivňováno programem Mercuriál. Zaslouží si tedy vlastní označení - například repozitórium.

  2. Obsahuje složku .hg neboli repozitář a případně další provozní soubory (.hgrc, .hgignore, ...).

  3. Obsahuje soubory a složky, které jsou součástí projektu. Přítomnost všech těchto složek v adresáři je Mercuriálem reflektovaná, složky jsou přitom pojímány jenom jako objekty na cestě k souborům.

    Soubory, které jsou uvedeny v souboru .hgignore, jsou Mercuriálem ignorovány. Soubory, jejichž název byl alespoň jednou akcí "commit" uložen do složky .hg/store/ repozitáře, jsou soubory sledované.

    Míra pozornosti, které je soubor v pracovním adresáři vystaven, se označuje jako statut souboru a má tyto kategorie:

    • ? - neznámý (nesledovaný) soubor, o němž Mercurial ví jen to, že existuje v repozitóriu

    • I - původně neznámý soubor, zařazený do seznamu ignorovaných souborů

    • A - původně neznámý soubor, zařazený jako kandidát pro komit

    • M - změněný sledovaný soubor, je kandidátem pro komit

    • ! - původně sledovaný soubor, ručně smazaný, přejmenovaný či přemístěný

    • R - soubor, odebraný ze sledování příkazem ´´hg remove´´

  4. Je to pracovní kopie vybrané revize repozitáře, která umožňuje manipulaci se souboury a složkami projektu jako v normálním pracovním adresáři. Složení a obsah sledovaných souborů v pracovní kopii se mění v závislosti na nastavené aktuální revizi (viz hg update).

    V instruktážních schematech se pracovní kopie (pracovní adresář) zobrazuje jako potenciální changeset, vycházející z aktuální rodičovské revize. Komitované změny pracovní kopie představují nový changeset. Nekomitovaným změnám pracovní kopie se říká lokální modifikace. Nemá-li pracovní kopie žádné lokální modifikace, říkáme, že je čistá.

Ideální skladba názvů popisovaných entit by byla repozitórium - repozitář - pracovní kopie. Musíme se však smířit s tím, že v anglických textech a schematech se setkáme pouze s termíny repozitář - pracovní adresář nebo dokonce s jediným, vše zahrnujícím termínem repozitář.

Zcela běžně se pro jednu a tutéž komitovanou změnu používají slova revize, changeset a komit.

Repozitórium je tedy vnímavý kořenový adresář projektu, který obsahuje složku .hg, zvanou repozitář a další složky a soubory, které tvoří sledovaný (pracovní kopii) i nesledovaný obsah projektu.

2. Repozitář

Repozitář je technicky vzato složka .hg v repozitóriu.

Následující ilustrace se pokouší naznačit situaci, kdy rodičovskou revizí pracovní kopie (pracovního adresáře) je revize č. 2, uložená ve složce .hg/store.

Subsložka .hg/store obsahuje kompletní historii projektu.

Na rozdíl od repozitória sleduje repozitář pouze tyto stavy souborů:

  • n -- normální
  • a -- přidaný
  • r -- odebraný
  • m -- sloučený

Repozitář obsahuje celou historii projektu, repozitórium (potažmo pracovní adresář) obsahuje časový snímek projektu v určitém bodě historie.

*/

3. Revize, changesety, čela a tip

Mercurial sdružuje změny ve více souborech do jednotlivých atomických (nedělitelných) changesetů. Každému changesetu je přiřazeno pořadové číslo revize. Protože Mercurial umožňuje decentralizovaný paralelní vývoj projektů, bývají tato čísla u různých uživatelů různá. Z tohoto důvodu uděluje Mercurial každé revizi 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ů, pokud mají jednoznačný význam, jako např. "e38487".

Větvení a slučování se může vyskytnout kdekoliv v historii projektu. Každá nesloučená větev vytváří nové čelo (head) historie. V naší ukázce jsou čely revize 5 a 6. Revize 6 je považována za tip (hrot) repozitáře, čelo s nejvyšším číslem revize. Revize 4 je slučovací, protože má dva rodičovské changesety (revize 2 a 3).

4. Klonování, slučování, akce pull a update

Začněme s Alenkou, jejíž repozitář vypadá následovně:

Pracovní adresář (working directory) je opět uváděn jako poslední (potenciální) changeset.

Bertík si vytvoří klon Alenčina projektu ve svém vlastním počítači:

Bertík nyní může pracovat nezávisle na Alence. Vytvoří dvě změny e,f, které postupně zaregistruje příkazem commit:

Alenka si vytvoří svou vlastní paralelní změnu g. Odlišné repozitáře v této chvíli představují dvě odlišné větve jejich společného projektu.

Nyní se Bertík synchronizuje s Alenkou pomocí příkazu pull. Tímto příkazem zkopíruje všechny změny Alenčina repozitáře (zde tedy pouze změnu g) do svého repozitáře. Jeho pracovní adresář však zůstává nezměněn.

Protože nejnovějším čelem v Bertíkově repozitáři je Alenčin changeset g, je nositelem označení tip.

Bertík dále provede příkaz merge (sloučení), který spojí jeho poslední revizi (f) s posledním changesetem (tipem) repozitáře. Jeho pracovní adresář má nyní dvě rodičovské revize (f, g):

Po kontrole pracovního adresáře, že sloučení je v pořádku, vytvoří Bertík příkazem commit slučující changeset h ve svém repozitáři:

Když si nyní Alenka přetáhne příkazem hg pull změny od Bertíka, přejdou do jejího repozitáře revize e,f a h:

Všimněme si, že po provedení příkazu pull je Alenčin pracovní adresář stále potomkem revize g. Alenka musí ještě provést příkaz update aby její pracovní adresář ukazoval na slučující changeset h a aby aktualizoval soubory v jejím pracovním adresáři vzhledem k revizi h.

Nyní jsou Alenčin a Bertíkův repozitáře opět plně synchronizovány.

5. Decentralizovaný systém

Mercurial je úplně decentralizovaný systém bez centrálního repozitáře. Uživatelé si mohou volně definovat své konstelace pro sdílení změn (viz CommunicatingChanges), včetně vyčlenění jednoho repozitáře jako centrálního:

Na rozdíl od centralizovaných systémů správy verzí, u nichž experimentování 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.


CzechUnderstandingMercurial (last edited 2018-08-03 18:27:01 by Tovim)