Gitflow a údržba několika starších verzí (backports)

Hryzo

Ahojte,

planujeme pouzivat git, presnejsie GitLab. Planujeme robit code review vo feature branches a tie potom mergovat ako pull requesty do povedzme master vetvy. Problemom su ale projekty, v ktorych je nutne udrziavat 2-3 release verzie a backportovat do nich zmeny. Bolo by teda idealne spravit pull-request do viacerych branchov, ale to z principu nepojde. Cherry picking tiez neprichadza moc do uvahy - idealne by bolo robit pull-requesty.

Ako sa robi takyto spatny maintenance napr. v GitLab-e, resp. GitHub alebo obecnejsie v git-e ?

« Poslední změna: 05. 04. 2018, 22:22:24 od Petr Krčmář »


Kit

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #1 kdy: 05. 04. 2018, 22:52:29 »
Nejprve udělá rebase patřičného release do feature a poté se provede merge feature do release. Opakovat pro všechny release.

Hryzo

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #2 kdy: 05. 04. 2018, 23:03:42 »
Ano, ale predstavte si, ze to musite spravit 3krat pre 3 rozne releasy - aplikovat tu istu opravu v tom istom kode - pre programatora to znamena v urcitych pripadoch 3krat napisat / aplikovat patch a 3x spravit pull-request. Ako sa to riesi na githube na velkych projektoch?

Idealne by bolo graftovat (cherry picking) tieto zmeny pokial sa da, ale takto si to v GitLab-e / GitHub-e nepredstavujem.

kimec

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #3 kdy: 05. 04. 2018, 23:04:44 »
pull requesty (merge requesty v GitLab speaku) do viacerych branchov su v pohode. Gitflow je ale mieneny tak, ze nove featury a bugfixy vyustia v novy release - napr. mergeom developu do mastra a priradenim tagu.
Nad uz vydanym releasom sa nerobi vyvoj novej funkcionality ani bugfixy. Maximalne je mozne robit kriticke opravy - hotfixy.

Ak potrebujete vyvyjat novu funkcionalitu pre 3 verzie naraz, tak to budu plnohodnotne backporty so vsetkym, co to obnasa. Zrejme vyvyniete novu funkcionalitu nad developom a potom rebasom preportite na kazdu verziu zvlast (a poriesite konflikty pre kazdu verziu zvlast). Kludne mozete robit pull requesty na rebasenute backportove vetvy - akurat to cele bude riadna rezia (hlavne ak su medzi tymi 3 verziami breaking changes voci developu, rozne verzie libiek, ine symboly atd.).

Hryzo

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #4 kdy: 05. 04. 2018, 23:13:10 »
pull requesty (merge requesty v GitLab speaku) do viacerych branchov su v pohode. Gitflow je ale mieneny tak, ze nove featury a bugfixy vyustia v novy release - napr. mergeom developu do mastra a priradenim tagu.
Nad uz vydanym releasom sa nerobi vyvoj novej funkcionality ani bugfixy. Maximalne je mozne robit kriticke opravy - hotfixy.

Ak potrebujete vyvyjat novu funkcionalitu pre 3 verzie naraz, tak to budu plnohodnotne backporty so vsetkym, co to obnasa. Zrejme vyvyniete novu funkcionalitu nad developom a potom rebasom preportite na kazdu verziu zvlast (a poriesite konflikty pre kazdu verziu zvlast). Kludne mozete robit pull requesty na rebasenute backportove vetvy - akurat to cele bude riadna rezia (hlavne ak su medzi tymi 3 verziami breaking changes voci developu, rozne verzie libiek, ine symboly atd.).

Zial myslel som si, ze zrejme nic ine neostava. Stale som dufal, ze sa to da nejako elegantne riesit - aspom rozdelenim jedneho pull-requestu do viacerych branchov - viem, ze je to proti logike. Ale slo mi hlavne o to, aby tam nebola taka komplikovana rezia - ale to bude asi dan sa code review a pull requesty.

K tym rebasom - problem je, ze aj developmenty budu musiet byt pre kazdu maintenance verziu a tu sa budu robit pull-requesty - nasledne z kazdeho developmentu pre kazdu maintenance verziu mergnutim do release vetvy pre kazdu maintenance verziu vznikne nova verzia.

Ta rezia je katastrofalna :(

Chapem, ze gitflow je idealny pre pristup - vydal som verziu a spat sa uz nevraciam (maximalne hotfix brancha ale iba pre aktualnu released verziu).


JmJ

  • ****
  • 333
    • Zobrazit profil
Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #5 kdy: 05. 04. 2018, 23:15:13 »
Pokud chci na to jit pres feature branche, pak je otazkou, z jake vetve se ta feature branch vyrobila. Pokud z hlavni vyvojove vetve (u tebe master), pak se feature mergne zpet do masteru. Pokud se na kazdy novy kod dela feature branch a pokud se by se kazda feature branch mergovala nejen do masteru, ale i do releasu, pak me s dovolenim napada otazka, cim se teda releasy lisi od masteru a cim se vlastne lisi navzajem od sebe?

Pokud jedu systemem, ze mam rekneme ten master jako hlavni vyvoj a pak mam release vetve pro jednotliva vydani a jsem nucen/chci udrzovat par releasu zpet, pak to udrzovani releasu by se melo omezit hlavne na opravu chyb a v krajnim pripade na nejakou upravu/novou funkci. Ano, vim, ze to nezni zrovna akademicky idealne. To ted nechme stranou.

Pokud tedy resim problemy tak jak pisu v predchozim odstavci, pak bych rekl, ze pokud mam pozadavek, abych doplnil novou vec do stare release, pak udelam feature branch z te release, udelam upravu a merguju zpet do release (merge request v gitlabu). Pak je na odpovedne osobe, aby bud hned nebo az casem hromadne mergla veci z releasu do masteru, mozna ze starsiho releasu do mladsiho. Jestli na tohle lze dat merge request nevim, ale rekl bych, ze by to mohlo jit.

Mi osobne tento postup dava nejvetsi smysl, nejvice se to blizi tomu, co je popisovano jako idealni gitflow. Od nej se to de facto lisi jen tim, ze je v jeden okamzik otevreno vice releasu, coz idealni gitflow nevidi rad.

Snazit se delat novinky v masteru a rvat je zpet do releasu mi prijde ponekud nasilne a nechci si moc predstavovat, co to obnasi. V urcitych situacich prece musim temer vse nove z masteru prenest do releasu, takze release je na tom stejne jako master. To mi prijde fakt pri nejmensim divny.

Moc sem asi neporadil, ale hlavne ze sem se vypovidal ;-)

kimec

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #6 kdy: 05. 04. 2018, 23:47:12 »
Chapem, ze gitflow je idealny pre pristup - vydal som verziu a spat sa uz nevraciam (maximalne hotfix brancha ale iba pre aktualnu released verziu).
Nie tak celkom. Mozete mat vonku aj 20 roznych releasov u 20 zakaznikov. Kazdy release mozete separatne hotfixovat, ak treba. Skor ide o to, ze ak zakaznik chce novu funkcionalitu, ma sa upgradnut na release, kde tato funkcionalita pribudla. Inymi slovami, nova funkcionalita nema prijst za zakaznikom do jeho 5 rokov stareho releasu, ale zakaznik ma prist za releasom.

Pokial backportovanie nie je vas core biznis, ma zmysel iba pre minimum veci - mozno nieco kriticke, lebo legislativa alebo good will voci skupine vernych zakaznikov atd.

xul

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #7 kdy: 06. 04. 2018, 04:19:42 »
Mozna by nebylo od veci zjistit jak to delaji v linuxovem
Kernelu, ktery je v gitu, pouziva se x verzi, kdyz se chce neco backportovat do starych verzi.

soyo

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #8 kdy: 06. 04. 2018, 07:18:47 »
Zdravim, pull request jednej revizie do viacerych vetiev predpoklada, ze v kazdom release bude fungovat ta ista oprava a dotiahne si so sebou svojich rodicov (a zachova si SHA). Prakticky ale rodicov nechceme a kod casto treba ohybat na mieru. Takze ci to budeme volat rebase, cherry-pick alebo specialny merge, efektivne sa bude s miernymi upravami kopirovat jeden patch na vsetky potrebne vetvy. Byva jednoduhsie portovat zmenu zo stareho kodu do mastra. Podla mna reziu v podobe review a testovania neusetrite. Komplexnost hospodarenia s vetvami je asi ten mensi problem.

Hryzo

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #9 kdy: 06. 04. 2018, 08:10:25 »
Pokud chci na to jit pres feature branche, pak je otazkou, z jake vetve se ta feature branch vyrobila. Pokud z hlavni vyvojove vetve (u tebe master), pak se feature mergne zpet do masteru. Pokud se na kazdy novy kod dela feature branch a pokud se by se kazda feature branch mergovala nejen do masteru, ale i do releasu, pak me s dovolenim napada otazka, cim se teda releasy lisi od masteru a cim se vlastne lisi navzajem od sebe?

Takto som to nemyslel :)

Pokud jedu systemem, ze mam rekneme ten master jako hlavni vyvoj a pak mam release vetve pro jednotliva vydani a jsem nucen/chci udrzovat par releasu zpet, pak to udrzovani releasu by se melo omezit hlavne na opravu chyb a v krajnim pripade na nejakou upravu/novou funkci. Ano, vim, ze to nezni zrovna akademicky idealne. To ted nechme stranou.

Takto som to myslel :)

Pokud tedy resim problemy tak jak pisu v predchozim odstavci, pak bych rekl, ze pokud mam pozadavek, abych doplnil
novou vec do stare release, pak udelam feature branch z te release, udelam upravu a merguju zpet do release (merge request v gitlabu). Pak je na odpovedne osobe, aby bud hned nebo az casem hromadne mergla veci z releasu do masteru, mozna ze starsiho releasu do mladsiho. Jestli na tohle lze dat merge request nevim, ale rekl bych, ze by to mohlo jit.

Mi osobne tento postup dava nejvetsi smysl, nejvice se to blizi tomu, co je popisovano jako idealni gitflow. Od nej se to de facto lisi jen tim, ze je v jeden okamzik otevreno vice releasu, coz idealni gitflow nevidi rad.

Snazit se delat novinky v masteru a rvat je zpet do releasu mi prijde ponekud nasilne a nechci si moc predstavovat, co to obnasi. V urcitych situacich prece musim temer vse nove z masteru prenest do releasu, takze release je na tom stejne jako master. To mi prijde fakt pri nejmensim divny.

Moc sem asi neporadil, ale hlavne ze sem se vypovidal ;-)

Ok, len som si potreboval potvrdit, ze to naozaj inak nejde a toto je najlepsie mozne riesenie. Dakujem.

Hryzo

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #10 kdy: 06. 04. 2018, 08:14:13 »
Chapem, ze gitflow je idealny pre pristup - vydal som verziu a spat sa uz nevraciam (maximalne hotfix brancha ale iba pre aktualnu released verziu).
Nie tak celkom. Mozete mat vonku aj 20 roznych releasov u 20 zakaznikov. Kazdy release mozete separatne hotfixovat, ak treba. Skor ide o to, ze ak zakaznik chce novu funkcionalitu, ma sa upgradnut na release, kde tato funkcionalita pribudla. Inymi slovami, nova funkcionalita nema prijst za zakaznikom do jeho 5 rokov stareho releasu, ale zakaznik ma prist za releasom.

Pokial backportovanie nie je vas core biznis, ma zmysel iba pre minimum veci - mozno nieco kriticke, lebo legislativa alebo good will voci skupine vernych zakaznikov atd.

Beriem, zial v praxi mame rozne release cykly produktu a release cykly u zakaznika, kde sa produkt pouziva a customizuje (a integruje). Takze je uplne normalne, ze sa vari nova major verzia v develop branchy ale popri tom sa musi nielen hotfixovat, ale aj doplnat nova funkcionalita do predchadzajucej major verzie, ktora bola uz releasnuta (priklad 1.2 -> 1.3, ale v develop sa uz vari 2.0, pretoze pocas okna vyvoju 2.0 netusime, kolko 1.X vznikne - zalezi od releasu okna u zakaznika).

Chapem, ze cely problem by riesil projekt manazment, ale nie je mozne zluzit release cykly produktu a ich pouzivania u desiatok zakaznikov.

Hryzo

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #11 kdy: 06. 04. 2018, 08:16:43 »
Mozna by nebylo od veci zjistit jak to delaji v linuxovem
Kernelu, ktery je v gitu, pouziva se x verzi, kdyz se chce neco backportovat do starych verzi.

Dakujem, presne toto ma zaujima a keby som to mal nastudovane, tak by som sa nepytal tu na fore. Ak viete ako sa to robi v linuxovom kernelu, prosim, podelte sa o vedomosti.

Hryzo

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #12 kdy: 06. 04. 2018, 08:19:51 »
Zdravim, pull request jednej revizie do viacerych vetiev predpoklada, ze v kazdom release bude fungovat ta ista oprava a dotiahne si so sebou svojich rodicov (a zachova si SHA). Prakticky ale rodicov nechceme a kod casto treba ohybat na mieru. Takze ci to budeme volat rebase, cherry-pick alebo specialny merge, efektivne sa bude s miernymi upravami kopirovat jeden patch na vsetky potrebne vetvy. Byva jednoduhsie portovat zmenu zo stareho kodu do mastra. Podla mna reziu v podobe review a testovania neusetrite. Komplexnost hospodarenia s vetvami je asi ten mensi problem.

Ano, toto bol ten problem, preco prakticky nie je mozne robit pull request naraz do viacerych vetiev - testoval som to v GitLabe, a presne ako pisete - nejakej forme cherry-pick sa tu neda zrejme vyhnut.

Slo mi mozno z pohladu programatora, ktory ma za ulohu backportovat zmenu, aby tato cast jeho prace bola co najviac automatizovana a robustna (blbuvzdorna) - aby bolo mozne identifikovat, ci sa oprava backportla do tych branchov kam mala, ci sa niekde nezabudlo backportovat a pod.

V tomto to ma mercurial ovela lepsie vymyslene - pretoze sa vzdy pozerate na cely repozitar so vsetkymi branchami a cherry-picking (graft) je lahko dohladatelny aj vizualne.

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #13 kdy: 06. 04. 2018, 09:18:59 »
Zial myslel som si, ze zrejme nic ine neostava. Stale som dufal, ze sa to da nejako elegantne riesit - aspom rozdelenim jedneho pull-requestu do viacerych branchov - viem, ze je to proti logike. Ale slo mi hlavne o to, aby tam nebola taka komplikovana rezia - ale to bude asi dan sa code review a pull requesty.
Přesně tak, ta režie je „daň“ za to, že chcete mít kvalitní kód. Ty backporty samozřejmě můžete do starších branchů nacpat bez code review a bez pull requestů – se všemi důsledky z toho plynoucími. Ale pokud chcete dělat code review, i když je to třeba aplikace stejného patche do tří větví, pořád jsou to tři různé změny, proto je potřeba to třikrát zkontrolovat. Protože ta změna není jen v samotných úpravách zdrojového kódu – jestli ten kód půjde přeložit vám ostatně zkontroluje kompilátor. Ta změna může mít vliv i na logiku programu, což by se mělo při code review také kontrolovat – a tam stejný patch může být pro jeden branch správně, ale pro jiný branch špatně.

Takže ten, kdo tu změnu backportuje, by se měl zamyslet nad tím, zda je možné ji opravdu v nezměněné podobě provést, a při code review by to pak měl někdo zkontrolovat. To samozřejmě žádný automatický nástroj neudělá. Ve srovnání s tou kontrolou, zda je opravdu možné použít záplatu beze změny, je pak samotná režie spojená s tím pull requestem zanedbatelná.

soyo

Re:Gitflow a údržba několika starších verzí (backports)
« Odpověď #14 kdy: 08. 04. 2018, 07:48:38 »
Ak to pomoze, ci potesi, tak git cherry-pick ma parameter -x, ktory do komentara prida SHA cherrypickovaneho commitu. A to uz vie pouzit aj taky gitk.