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/ )