Ahoj,
zajimalo by me jaka git workflow pouzivate.
A pripadne co se vam na kterem libi/nelibi, osvedcilo/vymstilo...
Nemusi jit nutne jen o git, ale ten me zajima nejvic...
Pokud muzete doplnit i detaily o poctu lidi/tymu pracujicich se stejnou codebase budu rad.
A pokud pouzivate git k verzovani i neceho jineho nez zdrojaku taky si to rad prectu.
Diky
tym cca 10 až 15 lidí, používáme
www.gitblit.com jako "centrální" repository. Máme více produktů-projektů. Na tom hlavním git repozitáři je nás max 10 lidí. Na codreview používáme Intellij Upsource. Nemáme povinné review. Je to na každém z vývojářů jak bude postupovat. Většinou se provádí commit rovnou do master branche a dělá se review až tam, aby bylo vše integrované co nejdříve, ale občas děláme review před merge do master branche. Kromě UpSource pužíváme ještě OpenGrok.
Snažím se aby vše pro daný produkt bylo v jednom git repozitáři a vše co jsme udělali aby bylo aspoň v gitblit jako samostatný repozitář.
Pro vývoj nové verze používáme master branch, před vydáním (záleží jak je potřeba) se master forkne do pre-release branche, když je hotovo, tak se pre-release branch mergne do branche se jmenem production.
Merge vs rebase. Ja osobne se snazim co nejvice pouzivat rebase, commity dělám docela často, zpravidla pokud jsem schopny tu změnu, co jsem udělal pojmenovat, ale nemáme to nijak omezené. Někdo používá merge, ale pak není vidět jednotlivé commit message. Někomu to nevadí, je rád, že za ním někdo chodí a ptá se na to, proč provedl nějakou změnu. Já dělám remote, takže si to moc nemůžu dovolit. Pokud děláme změny mimo hlaví release. Vytváříme z production branche novou branch se jmenem hotfix-<verze>. Ta se po vydání hotfixu mergne do production a do master. Každý commit do hotfix branche se pomoci cherry-pick "kopíruje" ihned i do master branche.
Ještě je důležité, že celý projekt se dokáže buildnout na jedno tlačítko v jenkins včetně všech tesů, které máme. Ty máme rozdělené do několika jobů a když někdo udělá commit, tak se začne buildit installer, produkt se nainstaluje a pustí se Geb (Selenium) testy. Další job jede paralelně a ten spouští integrační testy, které trvají déle - např. databáze. Další job je jen pro SonarQube - ten se nespouští po každém commitu - zatím. Další job má QA na vytvoření serveru pro manuální testování, než se provede deploy do aws do testovacího prostředí.
Vše je automatizované, V jenkins si u každého jobu je možné vybrat branch a tu buildovat. Je tam hodně kodu Gradle, v Groovy a v Bash. Snažíme se teď přesunout vše do Docker instancí a nahradit Bash scripty Ansible. Používáme i Ansible AWX.
Jako repozitář souborů, jar, npm, pypi, rpm, deb etc. používáme Nexus i jako proxy public repozitářů.