Správa verzí, možnosti verzování, typické situace při správě verzí (větvení, značkování).
Z Na státnice zvesela!
Obsah[skrýt] | 
[editovat] SCM (Software Configuration Management) a správa verzí
- správa verzí je součast úlohy SCM (aby prvek konfigurace mohl být ve správě SCM, musí být identifikovatelný, včetně všech svých podob)
 - účelem je tedy udržení přehledu o podobách prvků konfigurace
- verze popisuje jednu konkrétní podobu
 - v úložišti jsou skladovány všechny verze
 
 - druhy verzí
- historická podoba -> revize (př. Word 6.0)
 - alternativní podoba -> varianta (př. Word pro Macintosh)
 
 - určení konkrétní verze
- verzování podle stavu (verze prvku) – identifikují se pouze prvky
 - verzování podle změn (identifikace změny prvku) – identifikují se také změny prvků, výsledná verze prvku vznikne aplikací změn
 
 - granularita
- celá konfigurace
 - jednotlivé prvky
 
 - popis verze
- extenzionální verzování: každá verze má jednoznačné ID
- major.minor + build schéma- např. 6.0.2800.1106 (MSIE 6)
 - kódové jméno: One Tree Hill (= Firefox 0.9)
 - marketingový: Windows 95
 
 - intenzionální verzování: verze je popsána souborem atributů
- např. OS=DOS and UmiPostscript = YES
 - C preprocesor umožňuje intenzionální stavové verzování - např. chceme variantu foo.c pro případ OS=DOS and UmiPostscript=YES
 
 
 - extenzionální verzování: každá verze má jednoznačné ID
 
[editovat] Prostředí pro verzování: úložiště (=repository)
- = sdílený datový prostor, kde jsou všechny prvky konfigurace projektu
 - udržuje si konzistenci
 - základní operace
- inicializace – vytvoření úložiště
 - check out – vytvoření kopie prvku do lokálního pracovního prostoru
 - check in (commit) – uložení změněných prvků do úložiště
 - tagging – označení konfigurace symbolickým jménem
 
 - baseline
- konzistentní konfigurace tvořící stabilní základ pro produkční verzi nebo další vývoj (př. milník, beta verze aplikace)
 - stabilní = vytvořená, otestovaná, a schválená
 
 - delta
- množina změn prvku konfigurace mezi dvěma po sobě následujícími verzemi
 
 - kmen (trunk)
- hlavní vývojová linie
 
 - větev (branch)
- paralelní vývojová linie
 - izolace hlavního vývoje od jiných změn
 - možné přístupy k využití větví:
- vlastní větev pro vývojáře - průběžná synchronizace s hlavní větví
 - větev pro novou vlastnost
 - větev pro stabilizaci a opravy chyb dané verze
 
 
 - spojení (merge)
- sloučení změn z větve do kmene
 - cena za izolaci od změn jsou konflikty
 - distribuované systémy pro správu verzí mají lépe vyřešené slučování změn z různých vývojových větví
 
 
[editovat] Nástroje pro verzování
[editovat] Revision Control System (rcs)
- správa verzí pro jednotlivé textové dokumenty, UNIX, Windows, DOS
 - ukládá (do foo.c, v souborů)
- historii všech změn v textu souboru
 - informace o autorovi, datumu a času změn
 - textový popis změny zadaný uživatelem
 - další informace (stav prvku, symbolická jména)
 
 - funkce: zamykání souborů, poskytování R/O kopií (tipuju, že R/O je read only), symbolická jména revizí, návrat k předchozím verzím, možnost větvení a spojování změn z větví do kmene, informace o souboru a verzi lze včlenit pomocí klíčových slov ($Author$, $Date$. $Revision$, $State$, $Log$)
 - používá diff(1) pro úsporu místa (rozdíly)
- poslední revize uložená celá
 - předchozí pomocí delata vygenerované programem diff(1)
 
 
[editovat] Realizace variant (cpp)
- C preprocesor umožňuje intenzionální stavové verzování
 - například chceme variantu foo.c pro případ OS=DOS and UmiPostscript=YES
 
[editovat] Concurrent Versioning System (cvs)
- nadstavba na rcs (používá v formát souborů)
 - optimistický přístup ke kontrole paralelního přístupu (místo zamkni-modifikuj-odemkni (RCS přístup) pracuje systémem zkopíruj-modifikuj-sluč)
 - práce s celými konfiguracemi (projekty) najednou
 - zjišťování stavů prvků, rozdílů oproti repository
 - free software, příkazová řádka, grafické nadstavby
 - verzovány jednotlivé soubory (ne celé úložiště)
 
[editovat] Subversion (svn)
- následník CVS, způsob práce a příkazy velmi podobné CVS
 - od CVS se liší tím, že je verzováno celé úložiště (při každém commitu se zvýší verze úložiště o 1)
 - nové možnosti: binární diff, meta-data, abstraktní síťová vrstva (DAV), čisté API
 - jednoduchá souborová struktura (větve a značky jsou v podstatě adresáře ve struktuře SVN úložiště)
 - doporučená struktura úložiště (oddělené adresáře pro kmen, větve a značky)
- branches, trunk, tag
 
 
[editovat] GIT / Mercurial / Bzr (Bazaar)
- Distribuovaný model správy revizí narozdíl od centralizovaného (jeden server) např. SVN a všechny výše uvedené.
 - každý uživatel má plnou kopii repositáře daného projektu a může s ní dělat, co se mu zlíbí
 - lokální repositář může obsahovat i kopie libovolného počtu jiných repositářů v podobě samostatných branchů. Tedy nemusíte následovat jen základní linii daného projektu, ale i různé dočasné větve apod.
 - lze provádět commity lokálně (není nutné se pokaždé připojovat k centrálnímu serveru) a pak nahrát více commitů najednou na centrální server
 -  Příklady použití:
- GIT - správa zprojových kódů linuxového jádra (GIT byl původně navržen pro tento účel
 - Mercurial - používán např. pro správu zdrojových kódů JDK (Java Development Kit - OpenJDK)
 - Bazaar - používán při vývoji linuxové distribuce Ubuntu ( https://launchpad.net/ )
 
 
