Verzovací systémy (systémy pro správu verzí)
1 / Úvod Co je verzování • způsob uchovávání historie všech provedených změn u nějakého „dokumentu“ - typicky zdrojové kódy, blueprinty, ... • >> správa více verzí téže informace Kdy použít verzovací systém • pracuje-li na projektu více lidí (tj. téměř vždy) • potřebujeme-li zálohovat starší verze (tj. také téměř vždy ) Kde se můžeme setkat s verzováním • aplikace primárně určené pro správu verzí (CVS, Subversion, …) • v rámci různých kancelářských balíků – MS Office, OpenOffice.org • wiki systémy
2 / Výhody verzování Práce v týmu • možnost spolupráce více lidí (programátorů) na jednom projektu bez nutnosti přímého kontaktu • systém umí (nebo by měl) upozornit na konflikty (upravuje-li více lidí stejnou část kódu) Evidence jednotlivých změn • systém eviduje kdo a kdy provedl jaké změny >> možnost vrátit se zpět k některé z předcházejících verzí projektu, dostaneme-li se do slepé uličky apod. • každé změně je přiřazeno unikátní označení (číslo, písmeno, kombinace obojího, …), které jí jednoznačně identifikuje – většinou bývá označováno jako číslo revize • v případě změny se (většinou) ukládá pouze tato změna, nikoliv celý dokument/soubor >> značná úspora místa proti situaci, kdy by si
• • • •
programátor dělal kopie celých dat díky evidenci údajů u všech změn je možno např. přesně určit, kdo způsobil konkrétní chybu slučování verzí – významná úspora času proti ručnímu porovnávání souborů propagace změn používání vývojových větví – je možno např. oddělit funkční verzi pro zákazníka a pokračovat v dalším vývoji, je-li pak nutné v zákazníkově verzi provést rychle konkrétní úpravu, nemusíme se obávat zavlečení nových chyb z aktuálně rozpracované verze
Archivace dat • díky uchovávání každé změny slouží sytstém i jako archivátor všech dat Tvorba dokumentace • verzovací systém (většinou) umožňuje přidat ke konkrétní změně i
autorův komentář – jde tak o jakousi „průběžnou“ dokumentaci, ze které je možné zpětně vyčíst co a proč bylo měněno apod. Dostupnost • mnoho verzovacích systému je dostupných zdarma
3 / Nevýhody verzování Instalace a administrace • správa systému představuje práci navíc – rozsah záleží na velikosti projektu Nutnost přizpůsobit se danému stylu práce • postupy jsou víceméně přesně dané – nemusí vyhovovat každému Nutnost alespoň základního „technického myšlení“ • těžko očekávat, že úřednice na magistrátu budou jednotlivé vyhlášky spravovat pomocí verzovacího systému Primární využítí pouze pro textové soubory • systémy pro správu verzí jsou navrženy zejmená pro práci s textovými daty – binární soubory lze většinou také archivovat a verzovat, ale nelze již např. porovnávat jednotlivé změny
• u některých typů souborů to lze obejít, ale představuje to práci navíc Centrální úložiště • pracuje-li na projektu větší množství programátorů, je vhodnější rozdělit tým na menší „subtýmy“ pracující s vlastními repository >> použití distribuovaných systému (Bazaar, Mercurial, …) Bezpečnost • možnost vzdáleného přístupu k úložišti představuje potenciální riziko
4 / Kritéria dělení verzovacích systémů Licence • proprietární • open source ◦ BSD – volné šíření licencovaného obsahu; vyžaduje pouze uvedení autora a informace o licenci, spolu s upozorněním na zřeknutí se odpovědnosti za dílo ◦ GNU GPL – volné šíření; vyžaduje, aby byla odvozená díla dostupná pod toutéž licencí ◦ GNU LGPL (GNU Lesser GPL) – kompromis mezi GNU GPL a BSD
Typ (model) úložiště • centrální ◦ architektura klient-server ◦ jedno centrální úložiště pro celý projekt/tým • distribuovaný systém ◦ přístup peer-to-peer ◦ každý peer má svou vlastní repository ◦ výměna dat mezi jednotlivými peery probíhá prostřednictvím takzvaných change setů ◦ operace jako commit, vracení změn apod. jsou rychlejší – není třeba komunikovat se serverem
Model souběhu (Concurrency model) • dělí systémy podle toho, jak přistupují ka zajišťování konzistence dat • lock model ◦ uživatel nemůže měnit data, dokud nedostane „exkluzivní lock“ • merge model ◦ více uživatelů může měnit tatáž data ◦ systém změny sám sloučí ◦ upravuje-li více uživatelů stejnou část kódu (>> konflikt), je třeba rozhodnout, kterou změnu považovat za platnou • většina systému používá merge model Některá další kritéria • platforma • programovací jazyk • síťový protokol • ...
5 / Přehled některých verzovacích systémů Produkt
Licence Typ úložiště
Bazaar
GNU GPL
distribuované
ClearCase
prop.
centrální
Codeville BSD CVS GNU GPL Mercurial GNU GLP StarTeam prop. Subversion (SVN) BSD
distribuované centrální distribuované centrální centrální
Souběh
Platforma
merge
Unix, Win, Mac OS X Win, merge / lock HP-UX,Unix, i5/OS, OS/390, z/OS merge merge merge merge merge / lock
Unix, Win, Mac OS Unix, Win, Mac OS Unix, Win, Mac OS Win Unix, Win, Mac OS
X X X X