Od Subversion k Mercurialu
28.7.2009 | | Ostatní
Dnes jsem skončil se Subversion. Veškeré repositáře jsem převedl na Mercurial. Měl jsem k tomu víc důvodů. Asi ten nejdůležitější byl ten, že se Subversion se mě oproti Mercurialu pracovalo dost nepohodlně, druhý byl ten, že v práci používáme Mercurial co si pamatuji a pořád se mi to pletlo, dost často jsem u sebe na VPS dělal hg st a zejména hg ci -A a ono nic.
Musím uznat, že bych tuhle změnu asi neudělal, pokud bych delší dobu nepoužíval Mercurial. Dost mě pokaždé u svn rozhodilo zejména to, že když jsem byl zase u svn, tak ačkoli se svn a Mercurial co do ovládání příliš neliší, tak filozofie obou je naprosto jiná a to mě vadilo nejvíc.
Decentralizovaný Mercurial, centralizované Subversion
To je ten největší rozdíl. Mercurial je totiž decentralizovaný SCM nástroj oproti Subversion, které je centralizované. To znamená ve zkratce to, že každý vývojář si pracuje u sebe - commity, branche, tagy - tohle všechno končí u něj v repositáři. Z toho plyne i to, že každý pracuje jakoby na své větvi a v případě potřeby si spojí (merge) data s kýmkoli potřebuje, kdokoliv si také může mergovat s nim. Není tady centrální repositář s trunk, branches a tags. Je pravda, že v práci dospěli k takovému nějakému decentralizovaně centralizovanému systému. Máme jeden repositář ten se stanovil jako "main" a v něm se nachází "spolehlivý" kód, který se pak sype na produkční servery. To samozřejmě nebrání mergování vývojářů mezi sebou. Jestli to je správné nebo ne, těžko říci.
Drobné ale příjemné odlišnosti
Dále jsou to drobné, ale příjemné odlišnosti, kvůli kterým je práce s Mercurialem také o dost příjemnější:
- má jen jeden "revizní" adresář
.hgna celý repositář, žádné .svn kam se podíváš .hgignore, mě to vyhovuje více nežsvn propsethg ci -A, vyřeší za mě všechny mazání a přidávání při commitu. V svn jsem pořád musel dělat svn rm, svn add. Možná jde tohle i v svn, jen se špatně četl help.- je to celé takové rychlejší
- integrace s web prostředím je mnohem jednodušší
Dát repositář na web a povolit na něm push mě přišlo jednodušší než u svn. Žádný modul do apache, jen CGI pár voleb v konfiguraci apache a hotovo. Dokonce je v Mercurialu integrovaný web server pro snadné publikování vašeho repositáře na web.
Python, univerzální mocný prostředek
Bez zajímavosti není ani to, že velká část Mercurialu je napsaná v Pythonu, kritické části pak v C. To je mi velmi sympatické, ukazuje to na univerzálnost a sílu jakou Python disponuje. Web server, verzovací systém, GUI klient, command line klienti, web aplikace, tohle všechno v Mercurialu je a je to z velké části v Pythonu. Python tak např. PHP naprosto válcuje, to je nutné si přiznat. Navíc ta rychlost Mercurialu není vůbec špatná. Kdybych nesetrvával pouze u webu, dávno jsem se na PHP vykašlal a přešel na Python.
P.S. Poslední dobou všichni migrují na git, na něj jsem se ještě nekoukal, ale nějaké výraznější odlišnosti od Mercurialu bych neočekával. Přece jen to je také distribuovaný SCM, takže principy budou podobné, uvidíme časem. Také proto mě trochu zarazila migrace PHP repositáře z CVS na Subversion. Opravdu bych čekal spíš git, alespoň se na githubu zrcadlí.
1139x