Verzovací systémy Pořádek především!
Problém: Při vývoji máme velké množství textů, zdrojových kódů, obrázků, knihoven atd. v různých verzích!
Problém: Při vývoji máme velké množství textů, zdrojových kódů, obrázků, knihoven atd. v různých verzích! Každá změna je krok do neznáma. Vrátit se k "poslední funkční verzi" bývá problém.
Řešení: "...průběžně si ukládejte záložní verze" "...soubory nepřepisujte, dělejte si záložní (.bak) verze"... což vlastně žádné řešení není, protože je to spousta práce, kterou nakonec stejně nikdo nebude dělat.
Systematické řešení: VCS Version Controlling System - průběžné ukládání souborů v různých verzích - ukládání do společného úložiště - řešení konkurenčních přístupů
Prvopočátky: CVS Concurrent Version System Umožpuje vytvářet "revize", tj. "snímky" aktuálního stavu vývoje, vracet se k předchozím verzím a porovnávat verze mezi sebou. CVS pracuje s konceptem "centrálního úložiště" víc vývojářů může pracovat najednou s jednou sadou zdrojových kódů.
Konkurence: Konkurenční přístup: "Co se stane, když v jednu chvíli udělají dva lidé změny v jednom souboru?" Některé VCS to řeší zamykáním souborů před změnou si musí vývojář zamknout soubor pro sebe, po změně jej zase odemknout.
Konkurence: Zamykání souborů používal např. MS Visual SourceSafe. Problém: nepružnost. Když vývojář zapomněl odemknout soubor, celý koncept se zbořil.
Konkurence: CVS řeší konkurenční přístup metodou "kdo dřív přijde..." Pokud zjistí, že někdo posílá změny do souboru, který byl mezitím změněn, ohlásí konflikt, a dotyčný musí poblém vyřešit tedy stáhnout si aktuální verzi souboru a udělat změny znovu. Pomoc: "DIFF" algoritmus, který zjišťuje rozdíly mezi soubory.
Subversion Vylepšení systému CVS: Subversion (SVN) Sada změn několika souborů ("commit") změna se většinou týče více souborů a je jako jeden celek. SVN sleduje i přesuny souborů mezi adresáři. Pokud se potřebujete vrátit k předchozím verzím, není problém dohledat, "kde který soubor byl"
Subversion Subversion podporuje větvení vývoje. Tedy: uložené zdrojové kódy jsou ve "funkční větvi", vývojáři pracují na nových funkcích v "pracovních větvích". Pokud je nějaká funkce dokončená, sloučí se úpravy z pracovní větve s hlavní větví.
Subversion Pomocí větvení lze snadno vyvíjet např. experimentální funkce vytvoříte novou větev a v ní experimentujete. Pokud vše dopadne dobře, zařadíte ji do hlavní větve, pokud ne, výsledek snadno zahodíte...
Vedlejší efekty Verzovací systémy umožpují sledovat změny a ke každé přidávat poznámky, co bylo změněno a kdy. Lze použít například při tvorbě dokumentace.
Co s tím? - Ideální pro spolupráci více lidí na jedné věci - Automatické zálohování - Bezproblémový návrat k "poslední funkční verzi" - Užitečné i pro jednotlivce
"Soukromé použití" Při práci na textech, grafice, HTML stránkách atd. lze použít VCS pro zálohování a verzování. Při práci stačí průběžně ve "význačných okamžicích" vytvářet nové verze. Pokud nastane jakýkoli problém, nebo zjistíme, že jdeme slepou uličkou, můžeme se snadno vrátit zpět.
Distribuované VCS Centralizovaná VCS přinášejí kritický bod: centrální úložiště. V případě selhání tohoto úložiště přestává fungovat celý systém. Tento problém má CVS i SVN. Centrální úložiště nemusí selhat, stačí že není dostupné (problém při práci z různých míst).
Distribuované VCS Problém bylo třeba řešit u open source, na kterém pracují desítky lidí v různých místech světa. 1. Všichni by měli mít k dispozici kompletní zdrojové kódy 2. Systém by neměl být závislý na "centrálním úložišti"
Řešení: Distribuované VCS Každý vývojář má k dispozici lokální úložiště, které je snadno použitelné a funguje plnohodnotně. Úložiště umí poslat změny na jiné úložiště, nebo z jiného úložiště změny stáhnout.
Nejznámější DVCS: Git Alternativa: Mercurial Git (a spol.) www.progit.org/book
Git Jednoduchost Rychlost Flexibilita Snapshot-based Distribuovanost, nezávislost na centrálním repositáři Rozmanité workflow Silná podpora nelineárního vývoje (branch & merge) Interaktivní příprava revizí a editace historie Vynikající dokumentace a komunita
Git Instalace je velmi jednoduchá, jako u jakéhokoli jiného programu existuje verze pro Windows, pro Mac i pro Linux, a tyto verze jsou většinou integrovány přímo s rozhraním systému, takže práce je intuitivní. Lze pracovat buď s UI, nebo s příkazovou řádkou. Vaše IDE možná podporu pro GIT má!
Práce s Gitem Vytváříme třeba web... Soubory budou: index.html style.css script.js fotka.jpg pozadi.png logo.png
Práce s Gitem V pracovním adresáři vytvoříme úložiště (repository): git init... to je celé! (v porovnání s vytvářením úložišť v SVN/CVS naprosto snadné).
Práce s Gitem...a teď soubory "zaverzujeme": git add * V tuhle chvíli Git ví, že má sledovat všechny soubory a hlídat jejich změny. Zároveo si vytvořil pracovní kopii těchto souborů ("stage").
Práce s Gitem Řekneme Gitu, aby vytvořil novou revizi souborů: git commit m "první verze" Git si interně vytvoří novou verzi a poznamená si stav souborů v tomto okamžiku.
Práce s Gitem Můžeme zjistit, jaké soubory jsou připravené k commitu, jaké jsou změněné a jaké nové git status
Práce s Gitem Vytváření nových verzí je dvojúrovpové (ilustrace: Scott Chacon)
Práce s Gitem Vracení jednotlivých souborů k předchozí verzi: git checkout soubor Lze vrátit i kompletní historii: git log (ukáže čísla revizí) git checkout číslo revize vrátí pracovní adresář do stavu v dané chvíli
Práce s Gitem Podobným způsobem lze vytvářet lokální větve (branches), přepínat mezi nimi, porovnávat je, slučovat,... Výhody: - jednoduchá práce - automatické zálohování - snadný návrat k předchozímu stavu - snadné experimentování
Spolupráce s Gitem Ke spolupráci mezi více autory, resp. ke sdílení dat, slouží příkazy git push a git pull. git push "tlačí" změny do vzdáleného úložiště git pull "táhne" změny ze vzdáleného úložiště (Stejný princip propagace změn funguje i v dalších DVCS)
Spolupráce s Gitem Git nemá centrální úložiště, takže se víc spolupracovníků musí dohodnout, čí úložiště bude to "hlavní" dokonce nemusí být žádné "hlavní", nebo může být "hlavních" víc. Vytvoření úložiště na serveru je stejně snadné jako na lokálním počítači: git init!
DVCS workflow DVCS mění způsob práce tvůrců: - podporuje experimenty - usnadpuje spolupráci - dává práci řád - umožpuje automatizaci některých procesů
Ukázka DVCS workflow Příklad: web http://vyuka.maly.cz Je použit DVCS Mercurial (obdoba Gitu, o něco jednodušší nastavení)
Ukázka DVCS workflow hg add hg commit hg push
Ukázka DVCS workflow on change: - - hg push
Ukázka DVCS workflow on change: - - hg up
Ukázka DVCS workflow hg pull
Ukázka DVCS workflow hg add hg commit hg push on change: - - hg push on change: - - hg up
Ukázka DVCS workflow hg pull
Ukázka DVCS workflow Pracovní verze Záloha Pracovní verze "Live verze" na webu
Ukázka DVCS workflow Proč? - mohu pracovat z notebooku i ze stolního PC a nemusím se starat, jestli mám nejnovější verzi všech souborů, to za mne řeší pull - nemusím se starat, jestli jsem nezapomněl přenést nějaký soubor, to si pořeší push - nestarám se o zálohování, to je plně transparentní
Ukázka DVCS workflow DVCS používám i při psaní článků: - mohu zkoušet různé verze textu - při pádu editoru nepřijdu o celý text - mohu článek v určitém okamžiku "típnout", vytvořit z něj novou větev a psát třeba o nějakém detailu, a pak se rozhodnout, jestli to sloučím s původním textem, nebo jestli z toho udělám samostatný článek
Pro Git Zaujal vás Git? Kniha "Pro Git", ke stažení zdarma, vydalo sdružení CZ.NIC GitHub.com volné úložiště s Gitem pro open source projekty