-
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
3.4 Větve v systému Git - Postupy při práci s větvemi
Postupy při práci s větvemi
Když už máte základy větvení a slučování za sebou, jak s nimi můžete — nebo byste měli — pracovat? V této části se podíváme na některé běžné pracovní postupy, které vám snadné větvení umožňuje, takže se budete moci rozhodnout, zda je nezařadíte do vývojového cyklu svých projektů.
Větve s dlouhou životností
Protože Git používá jednoduché třícestné slučování, je opakované začleňování jedné větve do druhé velmi snadné i v průběhu delšího času. To znamená, že můžete mít neustále otevřeno několik větví a můžete je používat pro různé fáze vývojového cyklu. Některé z nich můžete pravidelně slučovat s jinými.
Řada vývojářů, kteří Git používají, si tento přístup osvojila, takže například ve větvi master
uchovávají kód, který je zcela stabilní — kód, který byl nebo bude součástí zveřejněné verze.
Kromě toho mají další, paralelní větev develop
nebo next
, ve které pracují nebo ji používají pro testování stability. Tato větev nemusí být nutně stabilní, ale jakmile se dostane do stabilního stavu, může být začleněna do větve master
.
Do ní se vtahují tématické větve (ty dočasné, jako byla dřívější větev iss53
) jakmile jsou připravené — abychom zajistili, že projdou všemi testy a nezavlečou chyby.
Ve skutečnosti hovoříme o ukazatelích pohybujících se vzhůru po linii revizí, které zapisujete. Stabilní větve leží v linii historie revizí níže a větve s nejčerstvějšími novinkami se nacházejí nad nimi.
![Lineární pohled na větvení podle stupně stability.](png/lr-branches-1.png)
Většinou je jednodušší uvažovat o větvích jako o pracovních zásobnících, kdy sada revizí postupuje do stabilnějšího zásobníku až po úplném otestování.
![„Zásobníkový“ pohled na větvení podle stupně stability.](png/lr-branches-2.png)
Takto můžete pokračovat pro několik úrovní stability.
Některé větší projekty mají také větev proposed
nebo pu
(proposed updates, návrh úprav), která přebírá věci z větví, které nejsou způsobilé k začlenění do větví next
nebo master
.
Hlavní myšlenka je taková, že se větve nacházejí na různé úrovni stability. Jakmile dosáhnou stability o stupeň vyšší, jsou začleněny do větve nad nimi.
Zopakujme, že není nutné používat několik dlouhotrvajících větví, ale často to může být užitečné, zejména pokud se jedná o velmi velké nebo složité projekty.
Tématické větve
Naproti tomu tématické větve se hodí v projektech jakékoli velikosti. Tématická větev (topic branch) je krátkodobá větev, kterou vytvoříte a používáte pro jediný konkrétní účel nebo práci. Je to něco, co byste v dřívějších systémech pro správu verzí nikdy nedělali, protože v nich je vytváření a slučování větví většinou náročné. Ale v Gitu je běžné, že se větev vytvoří, pracuje se v ní, sloučí se a odstraní — to vše i několikrát za den.
Viděli jste to v předchozí části, kdy jste si vytvořili větve iss53
a hotfix
.
Zapsali jste do nich pár revizí a smazali jste je hned po začlenění změn do hlavní větve.
Tato technika umožňuje rychlé a snadné přepínání kontextu. A protože je vaše práce rozdělena do zásobníků, kde všechny změny v jedné větvi souvisejí s jedním tématem, je při kontrole kódu snazší dohledat, čeho se změny týkaly a podobné věci.
Změny v nich můžete uchovávat několik minut, dní i měsíců a začlenit je až ve vhodnou chvíli — nezávisle na pořadí, v jakém vznikly nebo byly vyvíjeny.
Uvažujme příklad, kdy něco vytvoříte (v master
), odvětvíte se kvůli řešení problému (iss91
), chvíli na něm pracujete, vytvoříte druhou větev, abyste zkusili jiné řešení stejného problému (iss91v2
). Vrátíte se zpět do větve master
, kde chvíli pokračujete v práci a vytvoříte další větev, ve které chcete vyzkoušet něco, co by nemusel být dobrý nápad (větev dumbidea
).
Historie revizí bude vypadat nějak takto:
![Více tématických větví.](png/topic-branches-1.png)
Řekněme, že se nyní rozhodnete, že se vám druhé řešení problému líbí víc (iss91v2
). Svůj nápad ve větvi dumbidea
jste ukázali kolegům a ti ho považují za geniální.
Původní větev iss91
můžete zahodit (s ní i revize C5
a C6
) a začlenit zbylé dvě větve.
Vaše historie pak vypadá následovně:
![Historie po začlenění `dumbidea` a `iss91v2`.](png/topic-branches-2.png)
dumbidea
a iss91v2
Další detaily různých možných pracovních postupů, které můžete pro váš projekt v Gitu využít, rozebereme v kapitole Distribuovaný Git. Takže než se rozhodnete, jaké schéma větvení bude váš příští projekt využívat, přečtěte si ji.
Při tom všem, co nyní děláte, je důležité mít na paměti, že všechny tyto větve jsou zcela lokální. Veškeré větvení a slučování se odehrává pouze ve vašem gitovém repozitáři — neprobíhá žádná komunikace se serverem.