Git je boží. To je jasné i pětiletému dítěti, které followuje ty správné accounty na twitteru. Jenže když pracujete v zavedené firmě, celkem jistě máte nějaký jiný (starý, ošklivý, morálně přežitý) systém pro správu zdrojáků. V našem případě je to Subversion. Vyplatí se nám přejít na Git?
Git už nějakou dobu používám lokálně jako klienta do Subversion. Nejvíc oceňuju lokální větve, protože často experimentuju. Pracovat se Subversion přes Git není úplně hladké. Znám dva způsoby jak to dělat, ale oba mají svoje nevýhody (git-svn nebo git+svn). Určitě by bylo jednodušší, kdyby naše oficiální repository byla Git a ne Subversion.
Se Subversion je ale ta potíž, že ta potvůrka funguje dost dobře. Máme ji ve firmě už mnoho let (minimálně pět a půl, tak dlouho pracuju v GMC), vývojáři jsou na ni zvyklí, ICT ji umí zálohovat a obnovovat a také jsou na ni navázány nějaké reporty. Každá změna něco stojí, a tak je dobré vědět předem, co nám to přinese.
Náš nový kolega @sqdw se tím dokonce nějakou dobu zabýval a přechod na Git přednesl jako oficiální návrh. Problém je, že skutečně objektivních důvodů, proč přejít na Git, je zoufale málo. Že je boží prý není objektivní argument (což je podle mě subjektivní názor). Když trochu zagůglujete, objevíte pár dotazů na stackoverflow, stránky jako je http://whygitisbetterthanx.com a několik nadšených výkřiků. Mnoho argumentů, které se pro Git často uvádějí, je ale dle mého názoru dost sporných:
- Git je chytřejší a umí lépe mergovat. Platí to i se Subversion 1.5 a novější, kde lze používat property mergeinfo? Je to sice pomalé a křehké, ale ve firmě je možné se domluvit na dodržování pravidel, takže to je použitelné.
- Commity a historie jsou lokální a lze je používat offline. Jenže většina našich programátorů má desktopy pevně připojené k firemní síti (ano, je to zpátečnické, ale naše firma je neuvěřitelně stabilní, takže to funguje).
- Git je prý rychlejší. Opravdu i na Windows? Opravdu i ve srovnání se SVN 1.7? A jak to závisí na struktuře dat? Existuje nějaký spolehlivý benchmark?
- Git je distribuovaný. Jenže my potřebujeme mít nějaké "blessed repository", ze kterého budeme buildit oficiální verze. Často se uvádí, že díky distribuované povaze Gitu nemusíte tolik řešit zálohování, protože kompletní kopie repository má na svém počítači každý. Jenže my máme zálohování vyřešené (oddělení ICT). A opravdu má každý kompletní kopii repository? Vždyť při klonování si můžete určit, kolik revizí nazpět chcete stahovat.
- Git má skvělou command-line s dobrou nápovědou. Jenže na Windows jsme si zvykli na grafické nástroje. Používáme TortoiseSVN a VisualSVN a zatím jsme nenašli nic podobně vyspělého pro Git. Git Extensions má i základní integraci do Visual Studia, ale kvalit VisualSVN rozhodně nedosahuje.
Hlavní výhody Gitu lze podle mě využívat i s git-svn:
- Lokální větve. Git zásadně usnadňuje používání lokálních větví, ale kolik programátorů to používá? Vyplatí se přechod na Git, když to bude 20%?
- Protože commit je rychlá lokální operace a je možné ji před pushem do sdílené repository upravit, Git podporuje zdravý návyk - commit often.
- Implicitní sledování všech souborů a všech změn. Když chcete v Subversion přejmenovat soubor, musíte to udělat přes Subversion, ne přes operační systém. Git je chytřejší a (většinou) to pozná sám. Přístup "vše co mám ve složce patří do projektu" je mi velmi sympatický, ale u starších a rozsáhlejších projektů může ztěžovat konverzi; většinou to skončí s velmi rozsáhlým .gitignore souborem.
Nerad bych, aby to vyznělo jako kritika Gitu, Git je samozřejmě boží a kdo ho nepoužívá je lůzr. ale pokud už máte Subversion, je přechod na Git minimálně na zvážení. Já osobně jsem pro, jen nejsem stoprocentně přesvědčen o tom, že se to vyplatí. Naučit se Git je o něco složitější než Subversion a těch pár exotů, co jim to za to stojí (jako já, @sqdw a @stejcz), může používat git-svn. Pokud víte o nějakém zajímavém argumentu, proč v našem případě přejít ze Subversion na Git, dejte mi prosím vědět.
Vidím to úplně stejně. Skvěle napsané.
Ještě bych vypíchl schopnost gitu commitovat změny na úrovni řádků, což se často hodí při změnách projektového souboru. A pak ještě stashování, co je takový krátkodobý branch.
Z mých zkušeností si myslím, že přechod na git se ze SVN asi nevyplatí, protože git vyžaduje mnohem větší skill než SVN a často vídám, že lidi nezvládaj ani to, přesto že ho používají léta. :) Číst manuál je totiž lame.
Jedno relativně slavné video: http://youtu.be/4XpnKHJAok8
Výborný článek.
Já tké nemohu zahodit na všech projektech TFS a SVN, talže Mercurial u starších projektů používám na verzování work adresářů.
Na lokální commit a snadný "merge" se ale zvyká rychle, k SVN ani TFS bych se nevracel