Postřehy z verzovacího systému GIT.
V rámci pracovního projektu verzujeme v GITu. Je to hezké až do chvíle, kdy je třeba používat jeho největší sílu - větvení. Pro projekt, který nezávisí na dalších strukturách jako je databáze, je větvení v GITu skvělé. Avšak změny ve struktuře databází do GITu uložit nejdou. A to je vada pro vývoj projektu na web. Jen minimum webových aplikací nepoužívá nějaké databáze. Problém. Git zapisuje změny lokálně. Včetně větví.
Jak k tomu dojde je nasnadě. Prostě je v projektu změna, která vyžaduje určitý zásah do databází následných subjektů. To je věc, na kterou prostý diff nestačí. A v tom případě je potřeba ručně upravit každý projekt, který takový patch použije. Toto většina klasických aplikací nezná. Ty si zpravidla své datové struktury nesou samy. Pokud však použijí nějakou databázi, moc se se změnami ve struktuře během vydávání major verze nepočítá. Oproti tomu je vývoj na webu daleko ostřejší a změny v databázi vyžaduje, obzvlášť, když se mění kus logiky.
Celé je to vidět u vývojového serveru. GIT počítá, že každý člověk má u sebe lokálně prakticky celý repozitář se svými větvemi. Avšak webové projekty potřebují centrání vývojový server s databází, která odpovídá vývoji a na kterém teprv probíhá vývoj a má probíhat větvení. Ale takový server nemůže být kopírován lokálně na stroj každého vývojáře a následně mezi nimi data a strukturu 'nějak' slušně synchronizovat. Obzvlášť, když má jeden na svém stroji na klepání Windows (protože AD, víc neřešte). Ona ani distribuce dat v Gitu není řešením, protože u takovýchto projektů je třeba, aby jednotliví vývojáři sdíleli stejnou základnu kódu, což umožňuje právě centrální server na vývoj. Na druhou stranu to znamená, že si vývojáři 'šlapou do zelí' a při přidávání změn se zdržují. Také to znamená spoustu commitů, aby se zpropagovalo ladění.
Slušné řešení tohoto problému mne nenapadá. SVN má vadu v totálně centralistické struktuře, kde když se něco podělá, tak si vývojáři mohou akorát tak koupit letenky někam na Sibiř. Navíc postupně kyne. GIT pád centrálního stromu umí přežít. S dalšími systémy zkušenost nemám, ale problémy jsou obdobné. Obecně jde napsat, že vývoj proti strukturám třetích stran nemají verzovací systémy rády.
Každý, kdo verzuje projekt, který píše na Windows, se musel setkat s tím, že na serverové části je tzv. Baré repozitář. O co jde?
Baré repozitář je vlastně normální repozitář, kromě toho, že neudržuje celé soubory, ale jen souhrn změn, tedy commitů - tedy jen to, co je ve složce .git. Může ale nemusí mít nadřazený repozitář, kam informace vrací a spoustu podřízených, kterým informace vydává.
Já se s tímto setkal ve chvíli, kdy jsem chtěl vyrobit normální repozitář tak, aby Netbeansy hned po Pull nastavily soubory podle aktuálních změn a mohl jsem vývoj projektu trochu zrychlit. Problémy s merge od více vývojářů by samozřejmě nezmizel, jen by tak neřval, navíc mi přijde zbytečné držet na jednom stroji dva prakticky totožné repozitáře. Takto je potřeba mít na jednom stroji prakticky repozitáře dva a po pull ještě udělat push ve složce pro vývoj.