Differences between revisions 3 and 5 (spanning 2 versions)
Revision 3 as of 2010-04-07 17:00:45
Size: 10760
Editor: Tovim
Comment:
Revision 5 as of 2010-04-07 19:55:17
Size: 10868
Editor: Tovim
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
See the [[Tutorial]] for step-by-step instructions. Podrobnější instrukce viz [[CzechTutorial]].
Line 20: Line 20:
<<TableOfContents>> <<[[Seznam]]>>
Line 24: Line 24:
Termín [[Repository|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 [[WorkingDirectory|pracovním adresáři]].Obsah pracovního adresáře se mění podle nastavené aktuální revize: Termín [[Repository|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 [[WorkingDirectory|pracovním adresáři]]. Obsah pracovního adresáře se mění podle nastavené aktuální revize:
Line 57: Line 57:
Provedením příkazu [[Commit|commit]], se změny v aktuálním pracovním adresáři zapíší do nového [[ChangeSet|changesetu]] (neboli nové "[[Revision|revize]]"). Změny se vztahují k [[Parent|rodičovské]] revizi: Provedením příkazu [[Commit|commit]] se změny v aktuálním pracovním adresáři zapíší do nového [[ChangeSet|changesetu]] (neboli nové [[Revision|revize]]). Změny se vztahují k [[Parent|rodičovské]] revizi:
Line 86: Line 86:
Výše uvedená ilustrace není příliš ilustrativní. Vězme, že revize 4 byla vytvořena po revizi 3 jako '''[[Branch|větvení]]''' revize 2, jež byla aktuální při vzniku revize 4. Revize 4 je '''rodič''' revizí 3 a 4. Výše uvedená ilustrace není příliš ilustrativní. Vězme, že revize 4 byla vytvořena po revizi 3 jako '''[[Branch|větvení]]''' revize 2, jež byla při vzniku revize 4 aktuální. Revize 2 je '''rodič''' revizí 3 a 4.
Line 92: Line 92:
Každému changesetu je přiřazeno pořadové [[RevisionNumber|číslo revize]]. Protože Mercurial umožňuje rozptýlený paralelní vývoj projektů, bývají tato čísla revizí v různých repozitářích různá.

 So Mercurial also assi
gns each revision a global [[ChangeSetID|changeset ID]]. Changeset IDs are 40-digit hexadecimal numbers, but they can be abbreviated to any unambiguous prefix, like "e38487".
Každému changesetu je přiřazeno pořadové [[RevisionNumber|čí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í [[ChangeSetID|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".
Line 107: Line 106:
   workingdir [label="{{<p1> p1 | <p2> p2} | working directory}"];    workingdir [label="{{<p1> p1 | <p2> p2} | pracovní adresář}"];
Line 116: Line 115:
   label="example repository"
}
}}}

Branches and [[Merge|merges]] in the revision history can occur at any point. Each unmerged branch creates a new [[Head|head]] of the revision history.
Here, revisions 5 and 6 are heads. Mercurial considers revision 6 to be the [[Tip|tip]] of the repository, the head with the highest revision number.
Revision 4 is a [[MergeChangeset|merge changeset]], as it has ''two'' parent changesets (revisions 2 and 3).

== Cloning, Making Changes, Merging, Pulling and Updating ==

Let's start with a user Alice, who has a repository that looks like:

{{{#!dot
digraph {
   label="Alice's repo"
   label="příklad záznamu v repozitáři"
}
}}}

Větvení a [[Merge|slučování]] se může vyskytnout kdekoliv v historii revizí. Každé rozvětvení vytváří nové [[Head|čelo]] (head) historie. V naší ukázce jsou čely revize 5 a 6. Revize 6 je považována za [[Tip|tip]] repozitáře, čelo s nejvyšším číslem revize. Revize 4 je [[MergeChangeset|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ě:

{{{#!dot
digraph {
   label="Alenčin repozitář"
Line 137: Line 134:
Bob [[Clone|clones]] this repo, and ends up with a complete, independent, local copy of Alice's store
and a clean checkout of the tipmost revision d in his working directory:

{{{#!dot
digraph {
   label="Bob's repo"
Bertík si vytvoří [[Clone|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:

{{{#!dot
digraph {
   label="Bertíkův repozitář"
Line 149: Line 145:
Bob can now work independently of Alice. He then [[Commit|commits]] two changes e and f:

{{{#!dot
digraph {
   label="Bob's repo"
Bertík nyní nezávisle na Alence vytvoří dvě změny '''e''','''f''', které potvrdí příkazem [[Commit|commit]]:

{{{#!dot
digraph {
   label="Bertíkův repozitář"
Line 162: Line 158:
Alice then makes her own change g in parallel, which causes her repository store to diverge from Bob's, thus
creating a [[Branch|branch]]:

{{{#!dot
digraph {
   label="Alice's repo"
Alenka si vytvoří svou vlastní paralelní změnu '''g''':

{{{#!dot
digraph {
   label="Alenčin repozitář"
Line 175: Line 170:
Bob then [[Pull|pulls]] Alice's repo to synchronize. This copies all of Alice's changes into Bob's repository store
(here, it's just a single change g). Note that Bob's working directory is '''not''' changed
by the pull:

{{{#!dot
digraph {
   label="Bob's repo"
Nyní se Bertík synchronizuje s Alenkou pomocí příkazu [[Pull|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á [[Branch|větev]] '''g''' (tip):

{{{#!dot
digraph {
   label="Bertíkův repozitář"
Line 192: Line 185:
Because Alice's '''g''' is the newest head in Bob's repository, it's now the '''tip'''.

Bob then does a [[Merge|merge]], which combines the last change he was working on (f) with the
tip in his repository. Now, his working directory has two parent revisions (f and g):

{{{#!dot
digraph {
   label="Bob's repo"

Bertík dále provede příkaz[[Merge|merge]] (sloučení), který spojí jeho poslední změnu (f) s tipem repozitáře. Nyní má jeho repozitář dvě rodičovské revize (f,g):

{{{#!dot
digraph {
   label="Bertíkův repozitář"
Line 212: Line 203:
After examining the result of the merge in his working directory and making sure the merge is
perfect, Bob commits the result and ends up with a new [[MergeChangeset|merge changeset]] h in his
store:

{{{#!dot
digraph {
   label="Bob's repo"
Po kontrole, že sloučení proběhlo v pořádku, vytvoří Bertík příkazem commit [[MergeChangeset|sloučený changeset]] '''h''' ve svém uložišti:

{{{#!dot
digraph {
   label="Bertíkův repozitář"
Line 233: Line 222:
Now if Alice '''pulls''' from Bob, she will get Bob's changes e, f, and h into her store:

{{{#!dot
digraph {
   label="Alice's repo"
Pokud si nyní Alenka přetáhne (příkazem pull) změny od Bertíka, získá změny '''e''','''f''' a '''h''':

{{{#!dot
digraph {
   label="Alenčin repozitář"
Line 252: Line 241:
Note that Alice's working directory was not changed by the pull. She has to do an [[Update|update]] to synchronize
her working directory to the merge changset h. This changes the parent changeset of her working directory to
changeset h and updates the files in her working directory to revision h.

{{{#!dot
digraph {
   label="Alice's repo"
Vězme, že provedením příkazu pull se Alenčin pracovní adresář nezměnil. Musí ještě provést příkaz [[Update|update]] aby synchronizovala svůj pracovní adresář se staženým changesetem '''h''' (tip).

{{{#!dot
digraph {
   label="Alenčin repozitář"
Line 273: Line 260:
Now Alice and Bob are fully synchronized again.


== A Decentralized System ==

Mercurial is a completely decentralized system, and thus has no internal notion of a central repository. Thus users are free to define their own topologies for sharing changes (see CommunicatingChanges):

{{{#!dot
digraph {
   Alice -> Central
   Central -> Alice
   Bob -> Central
   Alice -> Bob
   Alice -> Carl
   Carl -> Central
   Bob -> Carl
   Carl -> Bob
   "Carl's Laptop" -> Carl
   Carl -> "Carl's Laptop"
   "Carl's Laptop" -> Central
   Central [style=fill;color=blue;label="Main Public Repo"]
   label="A Mercurial Network"
}
}}}

Unlike a centralized version control system in which experimentation
can be disastrous, with a DVCS like Mercurial, you just clone and
experiment. If you like the results, push them back, otherwise
wipe the cloned repository and try something else.


== What Mercurial can't do ==

Many SVN/CVS users expect to host related projects together in one repository. This is really not what Mercurial was made for, so you should try a different way of working. In particular, this means that you cannot check out only one directory of a repository.

If you absolutely need to host multiple projects in a kind of meta-repository though, you could try the [[subrepos|Subrepositories]] feature that was introduced with Mercurial 1.3 or the older ForestExtension.


For a hands-on introduction to using Mercurial, see the [[Tutorial]].
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):

{{{#!dot
digraph {
   Alenka -> Centrum
   Centrum -> Alenka
   Bertík -> Centrum
   Alenka -> Bertík
   Alenka -> Karel
   Karel -> Centrum
   Bertík -> Karel
   Karel -> Bertík
   "Karlův laptop" -> Karel
   Karel -> "Karlův laptop"
   "Karlův laptop" -> Centrum
   Centrum [style=fill;color=blue;label="Main Public Repo"]
   label="Síť Mercurialu"
}
}}}

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 [[subrepos|Subrepositář]], který byl zaveden v Mercurialu 1.3 nebo starší ForestExtension.


Podrobnější úvod k používání Mercurialu lze nalézt v [[CzechTutorial]].

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

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