-
1. Úvod
- 1.1 Správa verzí
- 1.2 Stručná historie systému Git
- 1.3 Základy systému Git
- 1.4 Příkazový řádek
- 1.5 Instalace systému Git
- 1.6 První nastavení systému Git
- 1.7 Získání nápovědy
- 1.8 Shrnutí
-
2. Základy práce se systémem Git
-
3. Větve v systému Git
- 3.1 Větve v kostce
- 3.2 Základy větvení a slučování
- 3.3 Správa větví
- 3.4 Postupy při práci s větvemi
- 3.5 Vzdálené větve
- 3.6 Přeskládání
- 3.7 Shrnutí
-
4. Git na serveru
- 4.1 Protokoly
- 4.2 Zprovoznění Gitu na serveru
- 4.3 Generování veřejného klíče SSH
- 4.4 Nastavení serveru
- 4.5 Démon Git
- 4.6 Chytrý HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Možnosti hostování u třetí strany
- 4.10 Shrnutí
-
5. Distribuovaný Git
- 5.1 Distribuované pracovní postupy
- 5.2 Přispívání do projektu
- 5.3 Správa projektu
- 5.4 Shrnutí
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Ladění v systému Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Shrnutí
-
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Atributy Git
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Shrnutí
-
9. Git a ostatní systémy
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Shrnutí
-
10. Git Internals
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Balíčkové soubory
- 10.5 The Refspec
- 10.6 Přenosové protokoly
- 10.7 Správa a obnova dat
- 10.8 Environment Variables
- 10.9 Shrnutí
-
A1. Appendix A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Shrnutí
-
A2. Appendix B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
2.3 Základy práce se systémem Git - Zobrazení historie revizí
Zobrazení historie revizí
Po vytvoření několika revizí[7], nebo pokud jste naklonovali repozitář s existující historií revizí, můžete chtít nahlédnout do historie projektu.
Nejzákladnějším a nejmocnějším nástrojem je v tomto případě příkaz git log
.
Následující příklady ukazují velmi jednoduchý projekt pojmenovaný simplegit
.
Můžete ho získat spuštěním
$ git clone https://github.com/schacon/simplegit-progit
Po zadání příkazu git log
byste pro tento projekt měli dostat výstup, který vypadá zhruba takto:
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
Ve výchozím nastavení a bez dalších parametrů vypíše příkaz git log
revize daného repozitáře v obráceném chronologickém pořadí — poslední revize se zobrazí na začátku.
Jak vidíte, tento příkaz vypíše všechny revize s jejich kontrolním součtem SHA-1, jménem a e-mailem autora, datem zápisu a zprávou o revizi.
Příkaz git log
disponuje velkým množstvím nejrůznějších voleb, díky nimž můžete zobrazit přesně to, co potřebujete.
Ukážeme si některé z nejpoužívanějších možností.
Jednou z užitečnějších voleb je -p
, která zobrazí rozdíly (diff) provedené v každé revizi.
Můžete přidat volbu -2
, která omezí výpis pouze na dva poslední záznamy:
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "schacon@gee-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
\ No newline at end of file
Tato volba zobrazí stejné informace, ale za každým záznamem následuje informace o rozdílech.
Je to velmi užitečné při kontrole kódu nebo k rychlému zjištění, co se stalo v posloupnosti revizí, které přidal váš spolupracovník.
Ve spojení s příkazem git log
můžete použít také celou řadu shrnujících voleb.
Pokud například chcete pro každou revizi zobrazit některé stručné statistiky, použijte volbu --stat
:
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
lib/simplegit.rb | 5 -----
1 file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
Jak vidíte, volba --stat
vypíše pod každým záznamem revize seznam změněných souborů, kolik souborů bylo změněno (changed) a kolik řádků bylo v těchto souborech vloženo (insertions) a smazáno (deletions).
Na konci výpisu se zároveň objeví souhrn těchto informací.
Další opravdu užitečnou volbou je --pretty
.
Změní výstup logu na jiný než výchozí formát.
K dispozici máte několik přednastavených možností.
Hodnota oneline
vypíše všechny revize na jednom řádku, což oceníte při prohlížení velkého množství revizí.
Dále se nabízejí hodnoty short
, full
a fuller
(zkrácený, plný, úplný), které zobrazují výstup přibližně ve stejném formátu, avšak s více či méně podrobnými informacemi:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
Nejzajímavější možností je předpis format
, který vám umožní předepsat vlastní formát výstupu logu.
Je to užitečné zejména v situaci, kdy generujete výstup pro strojové zpracování — formát předepisujete explicitně, takže máte jistotu, že se s aktualizací Gitu nezmění:
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit
Tabulka Užitečné volby pro git log --pretty=format
uvádí některé z užitečnějších značek, které předpis format
akceptuje.
Parametr | Popis výstupu |
---|---|
%H |
Otisk revize (H jako hash) |
%h |
Zkrácený otisk revize |
%T |
Otisk stromu (T jako tree) |
%t |
Zkrácený otisk stromu |
%P |
Otisky rodičovských revizí (P jako parent) |
%p |
Zkrácené otisky rodičovských revizí |
%an |
Jméno autora (author name) |
%ae |
E-mail autora (author e-mail) |
%ad |
Datum autora (formát respektuje --date=volba) |
%ar |
Datum autora, relativní |
%cn |
Jméno autora revize (committer name) |
%ce |
E-mail autora revize (committer e-mail) |
%cd |
Datum autora revize (committer date) |
%cr |
Datum autora revize, relativní |
%s |
Předmět (subject) |
Možná se ptáte, jaký je rozdíl mezi autorem a autorem revize. Autor (author) je osoba, která práci původně napsala, zatímco autor revize (committer) je osoba, která tuto práci naposled použila. Pokud tedy pošlete záplatu k projektu a někdo z užšího týmu [8] ji použije, získáte zásluhu oba — vy, jako autor, i daný člen týmu, jako autor revize. Uvedený rozdíl si blíže vysvětlíme v kapitole Distribuovaný Git.
Parametry oneline
a format
jsou zvlášť užitečné ve spojení s další možností log`u -- parametrem `--graph
.
Tato volba přidá pěkný malý ASCII graf, znázorňující vaši větev a historii slučování:
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
Tento typ výstupu nás začne víc zajímat, jakmile se v další kapitole začneme zabývat větvením a slučováním.
Uvedli jsme jen několik jednoduchých možností formátování výstupu příkazu git log
. Existuje jich mnohem víc.
Tabulka Běžné volby příkazu git log
uvádí seznam voleb, které jsme zatím probrali, a také pár dalších voleb pro formátování, které se mohou hodit — spolu s popisem toho, jak mění výstup příkazu log
.
Volba | Popis |
---|---|
|
Zobrazí záplatu (patch) zahrnutou do každé revize. |
|
Zobrazí statistiku pro změněné soubory v každé revizi. |
|
Zobrazí pouze řádek změněno/vloženo/smazáno z příkazu |
|
Za informacemi o revizi zobrazí seznam změněných souborů. |
|
Zobrazí seznam dotčených souborů spolu s informací přidáno/změněno/smazáno. |
|
Zobrazí jen několik prvních znaků kontrolního součtu SHA-1 místo všech 40. |
|
Zobrazí datum v relativním formátu (např. „2 weeks ago“, tj. před 2 týdny) místo data v úplném tvaru. |
|
Zobrazí vedle výstupu logu ASCII graf větve a historii slučování. |
|
Zobrazí revize v alternativním formátu. Parametry příkazu jsou |
Omezení výstupu logu
Kromě voleb pro formátování výstupu akceptuje příkaz git log
celou řadu užitečných omezujících voleb — tj. takových, které umožní zobrazit jen podmnožinu revizí.
S jednou takovou volbou už jsme se setkali — šlo o volbu -2
, která zobrazí pouze dvě poslední revize.
Můžete dokonce zadat -<n>
, kde n
je libovolné celé číslo. Povede to k zobrazení posledních n
revizí.
Ve skutečnosti ji asi nebudete využívat příliš často, protože Git standardně posílá výstup přes stránkovač, takže se najednou zobrazí jen jedna stránka logu.
Naopak velmi užitečné jsou volby pro vymezení času, jako --since
a --until
(„od“ a „do“).
Například následující příkaz zobrazí seznam všech revizí pořízených za poslední dva týdny (2 weeks):
$ git log --since=2.weeks
Tento příkaz pracuje s velkým množstvím formátů. Můžete zadat konkrétní datum ("2008-01-15"
) nebo relativní datum, jako je "2 years 1 day 3 minutes ago"
(před 2 roky, 1 dnem a 3 minutami).
Ze seznamu také můžete vyfiltrovat revize, které odpovídají určitým vyhledávacím kritériím.
Volba --author
vám umožní filtrovat výpisy podle zadaného autora, volbou --grep
můžete ve zprávách k revizi hledat klíčová slova.
(Pokud chcete předepsat současnou platnost voleb --author
a --grep
, musíte přidat --all-match
, jinak příkaz propustí revize vyhovující i jedné z nich.)
Dalším opravdu užitečným filtrem je volba -S
, které zadáme nějaký řetězec. Způsobí, že se zobrazí jen revize se změnami kódu, kdy byl zadaný řetězec přidán nebo odstraněn.
Pokud například chcete zjistit poslední revizi, kdy byl přidán nebo odstraněn odkaz na určitou funkci, můžete zavolat:
$ git log -Sjmeno_funkce
Poslední opravdu užitečná volba pro git log
spočívá ve filtrování podle zadané cesty.
Jestliže zadáte název adresáře nebo souboru, výstup logu omezíte na revize, které provedly změnu v těchto souborech.
Cesta je vždy posledním parametrem a většinou jí předcházejí dvě pomlčky (--
) , jimiž je oddělena od ostatních parametrů.
Tabulka Volby pro omezení výstupu příkazu git log
uvádí přehled již zmíněných a několika dalších voleb.
Volba | Popis |
---|---|
|
Zobrazí pouze posledních n revizí. |
|
Omezí výpis na revize zapsané po zadaném datu. |
|
Omezí výpis na revize zapsané před zadaným datem. |
|
Zobrazí pouze revize, u kterých autor příspěvku odpovídá zadanému řetězci. |
|
Zobrací pouze revize, u kterých autor revize odpovídá zadanému řetězci. |
|
Zobrazí pouze revize, které ve zprávě k revizi obsahují zadaný řetězec. |
|
Zobrazí pouze revize, které přidaly nebo odebraly kód se zadaným řetězcem. |
Pokud například chcete zjistit, které revize upravující testovací soubory v historii zdrojového kódu Gitu začlenil a zapsal Junio Hamano v říjnu 2008, můžete zadat následující příkaz:
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch
Z téměř 40 tisíc revizí v historii zdrojového kódu Gitu zobrazí příkaz 6 záznamů, které odpovídají zadaným kritériím.