Správa verzí, možnosti verzování, typické situace při správě verzí (větvení, značkování).

Z Na státnice zvesela!

Přejít na: navigace, hledání

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

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