Differences between revisions 9 and 10
Revision 9 as of 2010-02-16 20:05:10
Size: 7275
Editor: Tovim
Comment:
Revision 10 as of 2010-04-08 17:02:50
Size: 7141
Editor: Tovim
Comment:
Deletions are marked like this. Additions are marked like this.
Line 98: Line 98:
<!> Přejeme-li si změnu zavrhnout a začít znova, žeme použít příkaz
`revert` abychom navrátili `hello.c` k jeho nezměněnému stavu (nebo použít volbu `--all` pro zrušení změn u všech souborů). Měli bychom si být ale jisti, že to skutečně chceme (viz [[Revert]]).
<!> Přejeme-li si změnu zavrhnout a začít znova, použijeme příkaz
`revert` abychom navrátili `hello.c` k jeho nezměněnému stavu (nebo použít volbu `--all` pro zrušení změn u více souborů). Měli bychom si být ale jisti, že to skutečně chceme (viz [[Revert]]).
Line 117: Line 117:
$ rm hello.c # maže se hello.c
$ mv hello.c.orig hello.c # změna jména
$ hg st
> del hello.c # maže se hello.c
> ren hello.c.orig hello.c # změna jména
> hg st
Line 123: Line 123:
Vlastní akt ustavení changesetu se nazývá [[Commit|commit]]. Commit, neboli
registrovaná předávka změn do análů repozitáře, se provádí příkazem `commit`. Ten má rovněž hezkou zkratku: `ci` ("check in"), takže si ji hned vyzkoušíme:
Vlastní akt vytvoření changesetu se nazývá [[Commit|commit]]. Commit, neboli
zápis změn do souborů repozitáře, se provádí příkazem `commit`. Ten má rovněž hezkou zkratku: `ci` ("check in"), takže si ji hned vyzkoušíme:
Line 132: Line 132:
''Poznámka:'' Implicitně nastavený editor je `vi` nebo `Poznámkový blok`. To lze zřejmě změnit úpravou proměnných prostředí `EDITOR` nebo [[HGEDITOR]]. ''Poznámka:'' Implicitně nastavený editor je `vi` nebo `Poznámkový blok`. To lze změnit úpravou proměnných prostředí `EDITOR` nebo [[HGEDITOR]].
Line 162: Line 162:
`commit` bez dalšího výstupu. `commit` bez dalších projevů.
Line 172: Line 172:
Nic! Naše změna byla protokolárně předána changesetu, takže na "commit" žádná neregistrovaná změna nečeká.

Příkaz [[Parent|parents]] nám ukáže že obsah pracovního adresáře je ve shodě s jeho repozitářem (viz [[Update]]).
Nic! Naše změna byla zapsána do changesetu, takže žádná nevyřízená změna na commit nečeká.

Příkaz [[Parent|parents]] nám ukáže že obsah pracovního adresáře je ve shodě s posledním changesetem (viz [[Update]]).
Line 188: Line 188:
Nyní můžeme prozkoumat histori naších změn: Můžeme nyní prozkoumat histori naších změn:
Line 199: Line 199:
''Poznámka:'' Uživatel, datum a [[ChangeSetID|changeset ID]] bude u každého jiný.

Tutoriál 4 - Naše první změna

Předchozím tématem Tutoriálu byla Historie repozitáře, následujícím je Stažení změn z jiného repozitáře

Nacházíme se uvnitř repozitáře mojeHalo, který jsme si naklonovali v kapitole Klonování repozitáře.

Při práci s Mercurialem se doporučuje izolovat příbuzné změny v odlišném repozitáři (viz také WorkingPractices). To zabrání nechtěnému pomíchání změn a ulehčí oddělené testování jednotlivých úseků naší práce. Vydejme se touto cestou.

Naším pošetilým cílem je přimět program "hello, world" aby vytiskl ještě jeden řádek textu. Nejprve vytvoříme nový pracovní adresář nazvaný mojeHalo-output klonováním z adresáře mojeHalo:

> cd ..
> hg clone mojeHalo mojeHalo-output
updating working directory
2 files updated, 0 files merged, 0 files removed, 0 files unresolved

Všimněme si jména, které jsme dali svému novému pracovnímu adresáři. Naznačuje nám, čeho se tento adresář týká. Jelikož vytváření klonů je snadná záležitost, můžeme se snadno ocitnout v situaci, že jich budeme mít celou řadu. Neoznačíme-li si je popisnými jmény, snadno se v nich nevyznáme (viz RepositoryNaming).

Nyní provedeme změnu v novém repozitáři. Přejdeme do jeho pracovního adresáře a otevřeme soubor hello.c ve svém oblíbeném editoru:

> cd mojeHalo-output
> edit hello.c       # doporučuji notepad++ místo edit

Obsah souboru hello.c vypadá zpočátku takto:

/*
 * hello.c
 *
 * Placed in the public domain by Bryan O'Sullivan
 *
 * This program is not covered by patents in the United States or other
 * countries.
 */

#include <stdio.h>

int main(int argc, char **argv)
{
        printf("hello, world!\n");
        return 0;
}

Upravme main tak, aby se vytiskl další řádek takto:

(...)

int main(int argc, char **argv)
{
        printf("hello, world!\n");
        printf("to jsem rád, že mám Merkuriál!\n");
        return 0;
}

Po přidání řádku práci uložíme, zavřeme editor a jsme hotovi. Jsme připraveni vytvořit nový changeset.

Co když ale jsme byli při práci vyrušeni a zapomněli jsme, kde jsme vlastně přestali. Můžeme si to zjistit příkazem status.

> hg status
M hello.c

Výstup je stručný, neboť předpona M nám pouze říká, že hello.c bylo modifikováno, a změnu je možné zahrnout do changesetu.

Můžeme také použít zkrácené verze příkazu hg st, což Mercurial umožňuje, pokud nehrozí dvojznačnost.

> hg st
M hello.c

Můžeme také prozkoumat změnu podrobně příkazem diff:

> hg diff
diff -r 82e55d328c8c hello.c
--- a/hello.c   Fri Aug 26 01:21:28 2005 -0700
+++ b/hello.c   Mon May 05 00:27:56 2008 +0200
@@ -12,5 +12,6 @@
 int main(int argc, char **argv)
 {
        printf("hello, world!\n");
+       printf("to jsem rád, že mám Merkuriál!\n");
        return 0;
 }

<!> Přejeme-li si změnu zavrhnout a začít znova, použijeme příkaz revert abychom navrátili hello.c k jeho nezměněnému stavu (nebo použít volbu --all pro zrušení změn u více souborů). Měli bychom si být ale jisti, že to skutečně chceme (viz Revert).

> hg revert hello.c

revert přejmenuje modifikovaný soubor hello.c na hello.c.orig and navrátí (restores) hello.c k jeho nezměněnému stavu.

status nyní vypíše hello.c.orig jako nezaznamenávaný (předpona "?").

> hg st
? hello.c.orig

Jestliže opět změníme názor a chceme použít úpravu, kterou jsme právě odvolali, odstraníme neupravený stav hello.c a přejmenujeme hello.c.orig na hello.c

> del hello.c                # maže se hello.c
> ren hello.c.orig hello.c   # změna jména
> hg st
M hello.c

Vlastní akt vytvoření changesetu se nazývá commit. Commit, neboli zápis změn do souborů repozitáře, se provádí příkazem commit. Ten má rovněž hezkou zkratku: ci ("check in"), takže si ji hned vyzkoušíme:

$ hg ci

Příkaz si otevřel textový editor s řádky zatím poněkud nejasnými.

Poznámka: Implicitně nastavený editor je vi nebo Poznámkový blok. To lze změnit úpravou proměnných prostředí EDITOR nebo HGEDITOR.

HG: Enter commit message.  Lines beginning with 'HG:' are removed.
HG: --
HG: user: mpm@selenic.com
HG: branch 'default'
HG: changed hello.c

První řádek je prázdný a na dalších je uveden uživatel, jméno větve (branch) a jméno souboru, který bude zahrnut do changesetu.

Výchozí jméno větve je "default" (see NamedBranches). Výchozí hodnota pro "uživatele" je převzata z konfiguračního souboru ~/.hgrc ze sekce "ui" (viz hgrc(5)). Uživatele lze alternativně zadat z příkazové řádky volbou -u ... (viz hg help ci nebo hg.1.html#commit).

Příkaz commit se neprovede, pokud nedoplníme do prázdného řádku stručný popis změny (viz ChangeSetComments), například:

Ať žije DVCS Hg Mercurial!
HG: Enter commit message.  Lines beginning with 'HG:' are removed.
HG: --
HG: user: mpm@selenic.com
HG: branch 'default'
HG: changed hello.c

Uložíme text, zavřeme editor a jestli vše proběhlo dobře, dokončí se příkaz commit bez dalších projevů.

<!> Pokud opustíme editor bez uložení textu, nebo nezadáme text, příkaz commit se neprovede a můžeme jej opakovat. Podívejme se, co nám ukáže příkaz status nyní:

> hg st

Nic! Naše změna byla zapsána do changesetu, takže žádná nevyřízená změna na commit nečeká.

Příkaz parents nám ukáže že obsah pracovního adresáře je ve shodě s posledním changesetem (viz Update). Zde máme pouze jednoho rodiče (v lekci Slučování změn se setkáme se dvěma rodiči).

> hg par
changeset:   2:86794f718fb1
tag:         tip
user:        mpm@selenic.com
date:        Mon May 05 01:20:46 2008 +0200
summary:     Ať žije DVCS Hg Mercurial!

Zde to máme. Provedli jsme commit nového changesetu.

Můžeme nyní prozkoumat histori naších změn:

> hg log
changeset:   2:86794f718fb1
tag:         tip
user:        mpm@selenic.com
date:        Mon May 05 01:20:46 2008 +0200
summary:     Ať žije DVCS Hg Mercurial!
(...)

Jak jsme si ukazovali v Klonování repozitáře, nový changeset existuje pouze v našem repozitáři.

O přenosu změn si povíme v Stažení změn z jiného repozitáře.


CategoryCzech

CzechTutorialFirstChange (last edited 2013-11-15 20:12:59 by Tovim)