Tož Git dorazil i k nám!
David Grudl se rozhodl přejít s frameworkem Nette na Git a to vyvolalo další část moc zajímavé diskuse o Gitu v češtině.
Původně jsem začal psát komentář na Davidův blog, ale dostalo se mi následující odpovědi: “Nechci ti do toho kecat Karele, ale tak strašně dlouhé komentáře fakt nikdo nečte…”.
Místo komentáře tedy článek :)
Na blogu PHPFashion Messa píše:
V práci používáme SVN, … jak by vypadal workflow s Gitem – to by se buď jelo „centralizovaně“ (pushovalo do jednoho repozitáře, to je prý špatně a bez rozdílu oproti SVN)
Na tom přece není nic špatně. Prakticky všechny týmy, které znám, používají nějaké integrační, centrální repo pro výměnu mezi sebou. Tedy v tomto smyslu a jenom v tomto smyslu lze použít “Git jako SVN”. Pokud se jedná o malý tým, agilní vývoj, atd., neexistuje důvod, proč nemít takový centrální repositář, typicky např. na Githubu.
Výhoda a unikátní vlastnost Gitu je v tom, že podporuje nejenom tuto workflow, ale taky (skoro) jakoukoliv jinou. Hezké obrázky naleznete na serveru WhyGitIsBetterThenX, viz Subversion-Style Workflow, Integration Manager Workflow, Dictator and Lieutenants Workflow.
Github přímo podporuje tzv. Integration Manager Workflow tím, že si kdokoliv může udělat fork vašeho repositáře, do něhož může commitovat a pushovat. Pak pošle tzv. pull request a vy můžete, ale nemusíte, jeho změny přijmout. Není třeba zdůrazňovat, že podobná workflow je naprostým požehnáním pro open source projekty, jako je třeba Nette, a je to jeden z hlavních důvodů, které jsem Davidovi pro přechod na Git uváděl.
Ale fantazii se meze nekladou. Můžeš si třeba vymyslet vlastní workflow, kupříkladu:
- Každý pracuje lokálně
- a pushuje do “centrálního repositáře”,
- kde se po každém pushi pustí testy (unit, integration, Selenium, atd.),
- a pokud testy projdou, pushne se ještě dál do veřejného Git repositáře (např. na Githubu).
Podobným způsobem mají např. nastavené workflow kolegové z Centrum.cz, kteří takto spravují interní content-management systém v Djangu, který je zároveň open source: Ella.
Příklady a popis některých možných workflow najdete v prezentaci Scotta Chacona z RailsConf 2008, která dodnes tvoří téměř nejrozsáhlejší výukový materiál ke Gitu.
Ale dále k otázkám:
Zkoušel jsem Git pro osobní věci (poznámky, soukromé projekty) a SVN se mi také zde jeví pohodlnější.
To si absolutně neumím představit :) Potýkat se svnadmin create a pamatovat kde co je a jestli mám tyhle projekty v jednom repositáři nebo v různých, apod apod…?
S Gitem prostě udělám git init v adresáři, který začíná obsahovat něco, co by potenciálně mohlo být zajímavé a co by potenciálně mělo smysl verzovat. A mám verzovanou kopii čehokoliv (zdrojového kódu, specifikace projektu, článku na blog, Photoshop souboru, …). Nemusím repositář ani nikam nahrávat a verzovat si jen lokálně.
V momentě, kdy chci mít repositář “někde v síti”, provedu například jen scp -r .git user@example.com:/home/user/interesting/project.git a git remote add origin user@example.com:/home/user/interesting/project.git a mám hotovo.
Samozřejmě, mohl/měl bych případně provést git gc a mohl/měl bych především zřídit repo na serveru pomocí git init --bare --shared=true atakdále, ale nemusím. Git si postěžuje, ale je mu to vcelku jedno. Neplete se mi do cesty a neříká “hele, to si laskavě nejdřív …”.
Pomocí git push origin --mirror navíc můžu kompletní repo pravidelně zálohovat někam na server. Pomocí hooku můžu např. deployovat celý web.
Git mi navíc nezaplevelí celou working copy nějakými “.svn”, mám jen jeden “.git” adresář. Přepínání mezi branchemi probíhá pořád jen v jedné working copy, takže si můžu udržovat paralelní verze celého projektu a velmi rychle mezi nimi přepínat, spojovat je, apod.
Takže mně naopak přijde, že pro osobní/soukromé věci je Git (nebo Mercurial, apod., tuhle debatu nevedeme), mnohem lepší. Umím si představit z donucení používat SVN v zaměstnání. Neumím si SVN představit “doma”. :)