Differences between revisions 1 and 3 (spanning 2 versions)
Revision 1 as of 2014-01-07 20:57:11
Size: 2128
Editor: Tovim
Comment:
Revision 3 as of 2014-01-08 20:58:41
Size: 4056
Editor: Tovim
Comment:
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
Termín ''branch'' odpovídá intuitivní představě větve jenom zcela náhodou. Dle definice je branch "''sada všech changesetů, které mají jako atribut stejný název větve''". Tento atribut mají všechny changesety. Implicitní hodnotou tohoto atributu je slovo "default". Z definice tedy vyplývá, že všechny "větve" v repozitáři jsou pojmenované. Termín ''branch'' odpovídá intuitivní představě větve jenom zcela náhodou. Dle definice je branch "''sada všech changesetů, které mají jako atribut stejný název větve''". Atribut názve větve mají všechny changesety. Implicitní hodnotou tohoto atributu je slovo "default". Technicky by šlo zařídit, aby každý changeset nesl jiný název větve. Orientovaný acyklický graf (DAG) takového repzoitáře by spíše připomínal šňůru korálků než větvenou strukturu.
Line 9: Line 9:
Setkáme-li se s termíny "anonymní" a "pojmenovaná" větev, budeme tomu rozumět tak, že ''anonymní'' je větev, která nese implicitní označení "default" a ''pojmenovaná'' větev je ta, která byla explicitně pojmenována. Vytvoříme-li z orientovaného acyklického grafu strukturu, připomínající "košatý strom", může se přesto z hlediska definice jednat o jedinou větev, budou-li mít všechny jeho changesety stejný atribut názvu větve, například ''default''. Na druhou stranu lze zařídit (jak vyplývá z "korálků") aby se v přímém úseku grafu střídaly různé názvy větve.
Line 11: Line 11:
Vytvoříme-li z orientovaného acyklického grafu (DAG) "košatý strom", může se přesto z hlediska definice jednat o jedinou větev, budou-li mít všechny jeho changesety stejný atribut názvu větve, to jest ''default''. Z definice tedy vyplývá, že všechny "větve" v repozitáři jsou pojmenované. Setkáme-li se s termíny "anonymní" a "pojmenovaná" větev, budeme tomu rozumět tak, že ''anonymní'' je větev, která nese implicitní označení "default" a ''pojmenovaná'' větev je ta, která se jmenuje jinak.
Line 13: Line 13:
Přehlednější situace nastane, přiřadíme-li každé "haluzi" jiné jméno větve, což lze snadno zařídit. Jiný název můžeme přisoudit i přímému úseku přímé linie DAG a opět v téže lini pokračovat s názvem předchozím. Musíme si však uvědomit, že historie Mercuriálu je neměnná a kumulace názvů větví může časem vést k jisté nepřehlednosti. == Čelo větve ==
Line 15: Line 15:
Aby vznikla odbočující větev, které pro rozlišení říkejme pracovně "haluz", musí se do repozitáře přidat changeset, který vytváří nové ''čelo'' neboli ''head''. '''Čelo''' je changeset, který nemá potomky (potomek budiž dítě nebo dítě dítěte). Aby vznikla odbočující větev, musí se do repozitáře přidat changeset, který vytváří nové ''čelo'' neboli ''head''. '''Čelo''' je changeset, který v repozitáři nemá potomka (potomek budiž dítě nebo dítě dítěte). Takovému čelu se také říká ''topologické čelo''.

Kromě tohoto čela (větve) je rovněž definováno ''čelo větve'', které se vyznačuje tím, že ve větvi nemá potomka, to znamená, že se odbočená vývojová linie historie opět připojila k "hlavnímu proudu" prostřednictvím slučovacího changesetu, který již do postranní větve nepatří. Čelem větve je rodič slučovacího changesetu.

Pokusím se neuměle popsané deklarace ilustrovat. V následujícím schematu vidíme dva názvy větví - tedy dvě větve a dvě čela. Úseky větví vidíme sice čtyři ale pro ty nemáme pojmenování.
{{{
0def -- 1def -- 2bis -- 3bis -- 4def -- wc (working copy)
              \
                5def -- 6def -- 7def
}}}

V dalším schematu vidíme dvě větve a dvě čela (4bis, 8def).
{{{
0def -- 1def -- 2bis -- 3bis -- 4bis
              \ \
                5def -- 6def -- 7def -- 8def -- wc
}}}

Pro pobavení vyrobím ještě jedno schema se dvěmi větvemi a jedním čelem. Revize 4bis již není čelem větve, protože má v repozitáři potomka - 9bis.
{{{
0def -- 1def -- 2bis -- 3bis -- 4bis
              \ \
                5def -- 6def -- 7def -- 8def -- 9bis -- wc
}}}

Záležitost s čely, potažmo větvemi vypadá dost složitě ale neděsme se toho. Většinou budeme čela větví likvidovat jejich sloučením než iniciativně vytvářet. Nebudou tedy vznikat složité konstelace.
Line 19: Line 44:
Odbočující čelo nové větve může vzniknout přenesením kolidujícího changesetu ze vzdáleného repozitáře, nebo příkazem `hg branch <name>`, což se může realizovat ve dvou různých situacích: Odbočující čelo nové větve může vzniknout přenesením kolidujícího changesetu ze vzdáleného repozitáře, nebo příkazem `hg branch <name>`, což se může realizovat ve dvou různých situacích, v obou případech uzavřených akcí ''hg commit'':
Line 21: Line 46:
 * rodičem pracovní kopie je čelo přímého úseku DAG -- v tom případě dojde ke změně názvu a tudíž k vytvoření nové větve bez odbočování  * rodičem pracovní kopie je čelo přímého úseku DAG -- v tom případě dojde ke změně názvu a tudíž k vytvoření nové větve bez odbočování - viz 9bis.
Line 23: Line 48:
 {{{
 0def -- 1def -- 2def -- 3def
              \
                4bis -- 5bis -- wc
 }}}

Odbočující čelo nové větve s ponecháním původního názvu lze také vytvořit komitem změn pracovní kopie, napojené na neposlední changeset. Pracovní kopie předává novému changesetu odbočky název větve svého rodiče - viz 5def.

Větev neboli branch

Termín branch odpovídá intuitivní představě větve jenom zcela náhodou. Dle definice je branch "sada všech changesetů, které mají jako atribut stejný název větve". Atribut názve větve mají všechny changesety. Implicitní hodnotou tohoto atributu je slovo "default". Technicky by šlo zařídit, aby každý changeset nesl jiný název větve. Orientovaný acyklický graf (DAG) takového repzoitáře by spíše připomínal šňůru korálků než větvenou strukturu.

Vytvoříme-li z orientovaného acyklického grafu strukturu, připomínající "košatý strom", může se přesto z hlediska definice jednat o jedinou větev, budou-li mít všechny jeho changesety stejný atribut názvu větve, například default. Na druhou stranu lze zařídit (jak vyplývá z "korálků") aby se v přímém úseku grafu střídaly různé názvy větve.

Z definice tedy vyplývá, že všechny "větve" v repozitáři jsou pojmenované. Setkáme-li se s termíny "anonymní" a "pojmenovaná" větev, budeme tomu rozumět tak, že anonymní je větev, která nese implicitní označení "default" a pojmenovaná větev je ta, která se jmenuje jinak.

Čelo větve

Aby vznikla odbočující větev, musí se do repozitáře přidat changeset, který vytváří nové čelo neboli head. Čelo je changeset, který v repozitáři nemá potomka (potomek budiž dítě nebo dítě dítěte). Takovému čelu se také říká topologické čelo.

Kromě tohoto čela (větve) je rovněž definováno čelo větve, které se vyznačuje tím, že ve větvi nemá potomka, to znamená, že se odbočená vývojová linie historie opět připojila k "hlavnímu proudu" prostřednictvím slučovacího changesetu, který již do postranní větve nepatří. Čelem větve je rodič slučovacího changesetu.

Pokusím se neuměle popsané deklarace ilustrovat. V následujícím schematu vidíme dva názvy větví - tedy dvě větve a dvě čela. Úseky větví vidíme sice čtyři ale pro ty nemáme pojmenování.

0def -- 1def -- 2bis -- 3bis -- 4def -- wc (working copy) 
              \ 
                5def -- 6def -- 7def

V dalším schematu vidíme dvě větve a dvě čela (4bis, 8def).

0def -- 1def -- 2bis -- 3bis -- 4bis
              \                      \
                5def -- 6def -- 7def -- 8def -- wc

Pro pobavení vyrobím ještě jedno schema se dvěmi větvemi a jedním čelem. Revize 4bis již není čelem větve, protože má v repozitáři potomka - 9bis.

0def -- 1def -- 2bis -- 3bis -- 4bis            
              \                      \        
                5def -- 6def -- 7def -- 8def -- 9bis -- wc

Záležitost s čely, potažmo větvemi vypadá dost složitě ale neděsme se toho. Většinou budeme čela větví likvidovat jejich sloučením než iniciativně vytvářet. Nebudou tedy vznikat složité konstelace.

Vytvoření nové větve

Odbočující čelo nové větve může vzniknout přenesením kolidujícího changesetu ze vzdáleného repozitáře, nebo příkazem hg branch <name>, což se může realizovat ve dvou různých situacích, v obou případech uzavřených akcí hg commit:

  • rodičem pracovní kopie je čelo přímého úseku DAG -- v tom případě dojde ke změně názvu a tudíž k vytvoření nové větve bez odbočování - viz 9bis.
  • rodičem pracovní kopie je neposlední changeset -- v tom případě dojde k vytvoření nového čela s novým názvem větve.
     0def -- 1def -- 2def -- 3def          
                  \                            
                    4bis -- 5bis --  wc

Odbočující čelo nové větve s ponecháním původního názvu lze také vytvořit komitem změn pracovní kopie, napojené na neposlední changeset. Pracovní kopie předává novému changesetu odbočky název větve svého rodiče - viz 5def.

CzechBranch (last edited 2014-01-10 14:32:32 by Tovim)