Jak verzovat kód, když běží několik větví naráz

Z Mazovia


Nejčastější přístup je nezávislé verzování jednotlivých balíčků. Každý balíček má vlastní číslo verze a vlastní changelog. Změna se zapíše tam, kam patří, a release proběhne pouze pro dotčené balíčky. To funguje dobře, pokud balíčky nemají pevně svázané verze a pokud spotřebitelé odebírají jen některé z nich. Past je v tom, že závislosti mezi balíčky v monorepu musí být řešeny konzistentně. Buď používejte workspace protokol, který zajistí, že se vždy použije lokální verze, nebo striktně aktualizujte rozsahy závislostí při každé změně.

Základem je rozdělit úkol na tři samostatné položky: implementaci, revizi a úpravy. Implementace je to, co vývojář skutečně napíše. Revize je čas, který stráví kolega čtením, komentováním a testováním. Úpravy jsou pak vlastní zapracování připomínek. Pokud tyto tři položky sloučíte do jedné, nikdy nezjistíte, kde odhad selhal. Praxe ukazuje, rekonstrukce koupelny krok za krokem že revize u středně velké změny zabere přibližně deset až dvacet procent času implementace, u složitějších změn i více.

Spread a rest operátor (...) se plete hlavně začátečníkům. Spread kopíruje prvky do nového pole nebo objektu, rest sbírá zbytek do proměnné. U objektů platí, že spread dělá jen mělkou kopii — vnořený objekt zůstává sdílený. Kdo potřebuje hlubokou kopii, musí použít strukturované kopírování nebo knihovnu; jinak se změna v kopii projeví i v originálu.

Druhý přístup je jednotné verzování celého monorepa. Všechny balíčky mají stejnou verzi a vydávají se společně. Výhoda je jednoduchost a jasná kompatibilita. Nevýhoda je, že i malá oprava v jednom balíčku znamená novou verzi pro všechny. To může být přijatelné, pokud jsou balíčky úzce provázané a vždy se používají společně. Jakmile ale některé balíčky žijí vlastním životem, jednotné verzování začne být na obtíž. Pozor také na to, že změna verze všech balíčků najednou vyvolá velký počet publikací a může zatížit registry i CI.

Základ tvoří jednotkové testy. Mají pokrývat logiku, hraniční hodnoty, výpočty a chybové stavy. Dobře napsaný jednotkový test nepotřebuje databázi ani síť, běží v milisekundách a jeho selhání ukazuje přímo na řádek kódu. Typická chyba je testovat v jednotkovém testu příliš mnoho – například že se správně uložil záznam do databáze. To patří výš. Další častá chyba je mockovat všechno, co jde. Mock je nástroj pro izolaci, ne cíl. Když test obsahuje víc mocků než tvrzení, pravděpodobně testuje implementaci, ne chování.

Před každým rebasem si větev zazálohujte pod jiným názvem. Rebase umí selhat uprostřed a návrat k původnímu stavu je pak otázkou jediného příkazu. Během řešení konfliktů si všímejte, které soubory se konfliktují opakovaně. Pokud se stejný soubor hádá při každém sloučení, není problém v nástroji, ale v tom, že do něj píše příliš mnoho větví. Rozdělte odpovědnost nebo soubor rozdělte na menší části.

Pokud si nejste jistí, začněte jednoduše. Zvolte nezávislé verzování s nástrojem, který zvládne detekci změn, a teprve až narazíte na složitosti, přejděte k jednotnému. Monorepo není o tom mít všechno na jednom místě, ale o tom mít jasná pravidla pro to, co se kdy vydává.

Před nasazením otestujte chování na datech, která rostou. Simulujte vkládání během stránkování, ověřte, že se řádky neopakují ani nemizí. Změřte dobu odezvy pro první a poslední stránku. Pokud používáte offset, sledujte, jak roste čas s rostoucím offsetem. Kurzorová paginace bývá pomalejší na první stránce, If you cherished this write-up and you would like to acquire far more info relating to Crativ.Co.Kr kindly visit the webpage. ale stabilní dál. Dokumentujte oba režimy a nechte klienta zvolit, pokud to dává smysl. Konzistence a předvídatelnost jsou důležitější než elegance parametrů.

Rebase versus merge při více větvích U více paralelních větví platí jednoduché pravidlo: svou dosud nesdílenou práci rebasujte, sdílenou větev mergujte. Rebase přepíše historii a vytvoří čistší sled commitů, ale jakmile větev vidí kolegové, přepisování jim rozhodí repozitář. Prakticky to znamená, že lokální feature větev pravidelně rebasujete na aktuální hlavní linii, ale do hlavní linie ji vždy sloučíte mergem, případně přes rychlý přenos bez přepisu.

Typické chyby: návrat celkového počtu total u každého požadavku, i když ho klient nepotřebuje. Počítání přes celou tabulku je drahé. Dále ignorování maximálního limitu — bez max_limit někdo pošle limit=100000 a srazí server. Chybí také stabilní formát odpovědi. Klient by měl vždy dostat stejnou obálku: data, metadata a odkaz na další stránku. U kurzorové paginace nikdy neposílejte holý offset jako kurzor, protože se rozbije při změnách dat.