{"id":34744,"date":"2019-10-31T22:00:10","date_gmt":"2019-10-31T19:00:10","guid":{"rendered":"https:\/\/prohoster.info\/blog\/monorepozitorii-pozhalujsta-nado\/"},"modified":"2019-10-31T22:00:10","modified_gmt":"2019-10-31T19:00:10","slug":"monorepozitorii-pozhalujsta-nado","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","title":{"rendered":"Monorepo: prosim, to je nujno","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Monorepo: prosim, to je nujno\" src=\"\/wp-content\/uploads\/2019\/05\/a973a60a06e7b336c08db26fa6d72149.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Prevod \u010dlanka pripremljen za studente kursa <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/g5Rz\/\">\u00abDevOps prakse in orodja\u00bb<\/a><\/noindex> v izobra\u017evalnem projektu OTUS.<\/em><\/p>\n<p>Izbrati morate monorepo, ker vedenje, ki ga spodbuja v va\u0161ih ekipah, pomeni preglednost in kolektivno odgovornost, \u0161e posebej, ko ekipe rastejo. V vsakem primeru boste morali investirati v orodja, toda vedno je bolje, ko je privzeto vedenje tisto, ki ga \u017eelite videti v svojih ekipah. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h1 id=\"pochemu-my-govorim-ob-etom\">Zakaj o tem govorimo?<\/h1>\n<p><\/p>\n<p>Matt Klein je napisal \u010dlanek <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@mattklein123\/monorepos-please-dont-e9a279be011b\">\u00abMonorepos: Please don\u2019t!\u00bb<\/a><\/noindex>\u200a (op. prevajalca: prevod na Habr <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/435306\/\">\u00abMonorepos: prosim, ne delajte tega\u00bb<\/a><\/noindex>). Obo\u017eujem Matta, mislim, da je zelo pameten, in morate prebrati njegov pogled. Sprva je na Twitterju objavil anketo:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Monorepo: prosim, to je nujno\" src=\"\/wp-content\/uploads\/2019\/05\/edbc65b80288045e08394821c17a77a9.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Prevod:<\/em><br \/>\n<em>Na ta novolesni dan se bom spoprijel s tem, kako absurdni so monorepoji. Leto 2019 se je za\u010delo neopazno. V duhu tega vam predlagam anketo. Kdo so veliki obo\u017eevalci? Podporniki:<\/em><br \/>\n\u2014 <em>Monorepo<\/em><br \/>\n\u2014 <em>Rust<\/em><br \/>\n\u2014 <em>Napa\u010dna anketa \/ oboje<\/em><\/p>\n<p><\/p>\n<p>Moj odgovor je bil: \u00abJaz sem pravzaprav oba ta \u010dloveka\u00bb. Namesto da bi govoril o tem, kako je Rust droga, se pojdimo, zakaj mislim, da se moti glede monorepojev. Malo o meni. Sem tehni\u010dni direktor v Chef Software. Imamo okoli 100 in\u017eenirjev, koda, ki sega okoli 11\u201312 let, in 4 glavne produkte. Del te kode je v polirepoju (moji za\u010detni poziciji), del pa v monorepoju (moji trenutni poziciji).<\/p>\n<p><\/p>\n<p>Preden za\u010dnem: vsak argument, ki ga tukaj navajam, bo uporabljen za oba tipa repozitorijev. Po mojem mnenju ni nobenih tehni\u010dnih razlogov, zakaj bi morali izbrati ta ali oni tip repozitorija. Vsak pristop vam lahko deluje. Vesel sem, da se o tem pogovorim, a ne zanimajo me umetni tehni\u010dni razlogi, zakaj je eno bolj\u0161e od drugega. <\/p>\n<p><\/p>\n<p>Strinjam se s prvim delom Mattovega stali\u0161\u010da:<\/p>\n<p><\/p>\n<p><em>Ker bo na veliki ravni monorepo re\u0161eval vse iste probleme, ki jih re\u0161uje tudi polirepo, toda ob tem vas sili v mo\u010dno povezanost va\u0161e kode in zahteva neverjetne napore za pove\u010danje skalabilnosti va\u0161ega sistema nadzora razli\u010dic.<\/em><\/p>\n<p><\/p>\n<p>Ne glede na to, ali se odlo\u010dite za monorepo ali polirepo, se boste morali spopasti s podobnimi te\u017eavami. Kako izdajate razli\u010dice? Kak\u0161en je va\u0161 pristop k posodobitvam? Obdr\u017eite obratno zdru\u017eljivost? Kako upravljate s pre\u010dnimi odvisnostmi projektov? Katere arhitekturne sloge sprejemate? Kako obvladujete svojo infrastrukturo za gradnjo in testiranje? Seznam je neskon\u010den. In re\u0161ili jih boste vse, ko boste rasli. Brezpla\u010dnega sira ni.<\/p>\n<p><\/p>\n<p>Menim, da je Mattov argument podoben mnenjem, ki jih delijo \u0161tevilni in\u017eenirji (in mened\u017eerji), ki jih spo\u0161tujem. To prihaja z vidika in\u017eenirja, ki deluje na komponenti, ali ekipe, ki dela na komponenti. Sli\u0161ite take stvari, kot so:<\/p>\n<p><\/p>\n<ul>\n<li>Koda je pretirana - ne potrebujem vse te navlake.<\/li>\n<li>Te\u017eje je testirati, ker moram preveriti vso to navlako, ki je ne potrebujem.<\/li>\n<li>Te\u017eje je delati z zunanjimi odvisnostmi.<\/li>\n<li>Potrebujem svoje virtualne sisteme za upravljanje razli\u010dic.<\/li>\n<\/ul>\n<p><\/p>\n<p>Seveda so vse te to\u010dke upravi\u010dene. To se dogaja v obeh primerih - v polireposu imam svojo navlako, poleg tiste, ki jo potrebujem za gradnjo... Morda bom potreboval \u0161e drugo navlako. Zato \"enostavno\" ustvarim orodja, ki prenesejo celoten projekt. Ali ustvarim la\u017eni monorepo s podmoduli. Lahko bi cel dan razpravljali o tem. Vendar menim, da Mattov argument spregleda osnovni razlog, ki sem ga precej prevzel v prid monorepo:<\/p>\n<p><\/p>\n<h1 id=\"on-provociruet-obschenie-i-pokazyvaet-problemy\">Spodbuja komunikacijo in razkriva te\u017eave.<\/h1>\n<p><\/p>\n<p>Ko delimo repozitorije, dejansko ustvarjamo te\u017eavo koordinacije in preglednosti. To sovpada s tem, kako razmi\u0161ljamo o ekipah (\u0161e posebej s tem, kako o njih razmi\u0161ljajo posamezni \u010dlani): odgovorni smo za dolo\u010deno komponento. Delamo v relativni izolaciji. Meje so dolo\u010dene na moji ekipi in komponentah, na katerih delamo.<\/p>\n<p><\/p>\n<p>\u041f\u0440\u0438 \u0443\u0441\u043b\u590d\u6742\u043d\u0435\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0443\u0436\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u044e \u0432 \u043e\u0434\u0438\u043d\u043e\u0447\u043a\u0443. \u041e\u0447\u0435\u043d\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0434\u0435\u0440\u0436\u0430\u0442 \u0432\u0441\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u043e\u0431\u0449\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c A, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 B, C \u0438 D. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 A \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433, \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 API \u0438 \u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c\u0438. \u041a\u0430\u043a\u043e\u0439 \u0441\u043e\u0432\u0435\u0442 \u0432\u044b \u0434\u0430\u0434\u0438\u0442\u0435?<\/p>\n<p><\/p>\n<ul>\n<li>\u041d\u0430\u0439\u0434\u0438\u0442\u0435 \u0432\u0441\u0435 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0439 API.<\/li>\n<li>\u0415\u0441\u0442\u044c \u043b\u0438 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 API?<\/li>\n<li>\u041c\u043e\u0436\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u044e\u0442\u0441\u044f?<\/li>\n<li>\u041c\u043e\u0433\u0443\u0442 \u043b\u0438 \u044d\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0430\u0448\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441?<\/li>\n<\/ul>\n<p><\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044d\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0442\u0438\u043f\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \u0412\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b B, C \u0438 D. \u0412\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0441 \u043d\u0438\u043c\u0438, \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u0438\u0445 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u044b. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043c\u044b \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442\u0435.<\/p>\n<p><\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c. \u042d\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u0435\u0435 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0447\u0451\u0440\u0442\u043e\u0432\u043e\u0433\u043e API. \u0412\u0441\u0451 \u044d\u0442\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0435 \u0438 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u043e\u0435. \u0412 \u043f\u043e\u043b\u0438\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0434\u0430\u0442\u044c \u043d\u0430 \u0440\u0435\u0432\u044c\u044e \u0442\u0435\u043c, \u043a\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0434 \u044d\u0442\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c (\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043d\u0435 B, C \u0438\u043b\u0438 D), \u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. \u041a\u043e\u043c\u0430\u043d\u0434\u044b B, C \u0438 D \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u041e\u043d\u0438 \u043e\u0431\u043d\u043e\u0432\u044f\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u0441\u043e\u0437\u043d\u0430\u044e\u0442 \u0432\u0430\u0448\u0443 \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c!<\/p>\n<p><\/p>\n<p>\u0412 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 A \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u044f\u0432\u0438\u0442 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043b\u043e\u043c\u0430\u0435\u0442 B, C \u0438 D. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e B, C \u0438 D \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0443 \u0434\u0432\u0435\u0440\u0438 A, \u0443\u0434\u0438\u0432\u043b\u044f\u044f\u0441\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 A \u0441\u043b\u043e\u043c\u0430\u043b\u0430 \u0441\u0431\u043e\u0440\u043a\u0443. \u042d\u0442\u043e \u0443\u0447\u0438\u0442 A \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u044b\u0448\u0435. \u041e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c. \u041c\u043e\u0433\u0443\u0442 \u043b\u0438 B, C \u0438 D \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f? \u0427\u0442\u043e, \u0435\u0441\u043b\u0438 B \u0438 C \u043c\u043e\u0433\u0443\u0442, \u043d\u043e D \u0431\u044b\u043b \u0442\u0435\u0441\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430?<\/p>\n<p><\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0432\u044b\u0439\u0434\u0435\u043c \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438:<\/p>\n<p><\/p>\n<ol>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 API, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0430\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c, \u043f\u043e\u043a\u0430 D \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0440\u0435\u043b\u0438\u0437\u043e\u0432, \u043e\u0434\u043d\u0430 \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u043e\u0434\u043d\u0430 \u0441 \u043d\u043e\u0432\u044b\u043c.<\/li>\n<li>\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0435\u043b\u0438\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 A \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e B, C \u0438 D \u043d\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e.<\/li>\n<\/ol>\n<p><\/p>\n<p>Recimo, da smo izbrali 1, ve\u010d API-jev. V tem primeru imamo dva kosa kode. Stara in nova. To je precej priro\u010dno v nekaterih situacijah. Staro kodo vrnemo, ozna\u010dimo jo kot zastarjeno (deprecated) in uskladimo na\u010drt za njeno odstranitev s skupino D. V bistvu je identi\u010dno za poli in za monorepo.<\/p>\n<p><\/p>\n<p>Za izdajo ve\u010d razli\u010dic potrebujemo vejo. Zdaj imamo dva komponenta \u2014 A1 in A2. Skupini B in C uporabljata A2, medtem ko D uporablja A1. Vsaka komponenta mora biti pripravljena za izdajo, saj lahko pred napredovanjem D potrebujemo posodobitve varnosti in popravke drugih napak. V poli repo lahko to skrijemo v dolgotrajni veji, ki se po\u010duti dobro. V monorepo pa prisilimo ustvarjanje kode v novem modulu. Skupina D bo \u0161e vedno morala narediti spremembe v 'stari' komponenti. Vsak lahko vidi stro\u0161ke, ki jih tukaj pla\u010dujemo \u2013 zdaj imamo dvakrat ve\u010d kode, in vse popravke napak, ki se nana\u0161ajo na A1 in A2, je treba uporabiti za oboje. Pri pristopu z uporabo vej v poli repo je to skrito za cherry-pick. Stro\u0161ke ocenjujemo kot manj\u0161e, ker ni podvajanja. Z prakti\u010dnega vidika so stro\u0161ki enaki: ustvarjali, izdali in vzdr\u017eevali boste dve, ve\u010dinoma identi\u010dni, bazi kode, dokler ne boste mogli odstraniti ene od njiju. Razlika je v tem, da je ta bole\u010dina pri monorepo neposredna in na o\u010deh. <strong>To je \u0161e slab\u0161e in to je dobro.<\/strong><\/p>\n<p><\/p>\n<p>Na koncu smo prispeli do tretje to\u010dke. Zakasnitev izdaje. Morda bodo spremembe, ki jih uvede A, izbolj\u0161ale \u017eivljenje ekipe A. Pomembno, a ne nujno. Ali lahko enostavno zavle\u010demo? V monorepozitoriju to potiskamo k utrditvi artefakta. Seveda, o tem govorimo z ekipo D. Preprosto ostanite na stari razli\u010dici, dokler ne dohiteti! To vodi v igro s tveganjem. Ekipa A \u0161e naprej dela na svojem komponentu, ignorira dejstvo, da ekipa D uporablja vse bolj zastarelo razli\u010dico (to je te\u017eava ekipe D, so neumno). Medtem ekipa D slabo govori o neprevidnem odnosu ekipe A do stabilnosti kode, \u010de sploh govorijo o tem. Minili so meseci. Na koncu se ekipa D odlo\u010di, da pogleda mo\u017enost nadgradnje, a sprememb v A je le \u0161e ve\u010d. Ekipa A se komaj spomni, kdaj in kako so pokvarili D. Nadgradnja je bolj bole\u010da in bo vzela ve\u010d \u010dasa. Kar \u0161e dodatno zni\u017ea prioritetno lestvico. Do dneva, ko imamo te\u017eavo z varnostjo v A, kar nas prisili v izdelavo veje. Ekipa A se mora vrniti nazaj v \u010das, najti trenutek, ko je bil D stabilen, tam popraviti te\u017eavo in ga pripraviti za izdajo. <strong>To je de facto izbira, ki jo ljudje sprejemajo, in nedvomno najslab\u0161a.<\/strong> Zdi se, da je to dobro tako za ekipo A kot za D, dokler se lahko ignoriramo.<\/p>\n<p><\/p>\n<p>V monorepozitoriju tretja mo\u017enost res ni na voljo. Pripravljeni ste se spoprijeti s situacijo na enega od dveh na\u010dinov. Morate videti stro\u0161ke imeti dve izdaji. Nau\u010diti se morate za\u0161\u010dititi pred nadgradnjami, ki prelomijo obratno zdru\u017eljivost. Ampak najbolj pomembno: <em>ne morete ube\u017eati te\u017ekemu pogovoru.<\/em><\/p>\n<p><\/p>\n<p>Po mojem mnenju, ko ekipe postanejo velike, ni ve\u010d mogo\u010de obdr\u017eati celotnega sistema v mislih in to je najpomembnej\u0161i del. Morate izbolj\u0161ati vidnost nesoglasij v sistemu. Aktivno morate delati na tem, da ekipe odvzamejo pogled s svojih komponent in pogledajo na delo drugih ekip in uporabnikov.<\/p>\n<p><\/p>\n<p>Da, lahko ustvarite orodja, ki se bodo trudila re\u0161iti te\u017eave polirepozitorijev. A moje izku\u0161nje z neprekinjeno dobavo (continuous delivery) in avtomatizacijo v velikih podjetjih mi govorijo, da je privzeto vedenje brez dodatnih orodij tisto, kar pri\u010dakujete videti. <strong>Privzeto vedenje polirepozitorija je izolacija, kar je pomen samega sistema. Privzeto vedenje monorepozitorija pa je skupna odgovornost in preglednost, kar je pomen sama sistema.<\/strong> V obeh primerih nameravam ustvariti orodje, ki bo omogo\u010dilo meh\u010danje ostrih robov. Kot vodja bom vedno izbral monorepozitorij, ker morajo orodja okrepiti kulturo, ki jo \u017eelim, in kultura izhaja iz majhnih odlo\u010ditev ter vsakodnevnega dela ekipe.<\/p>\n<p class=\"for_users_only_msg\">Samo registrovani korisnici mogu u\u010destvovati u anketi. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prijavite se<\/a><\/noindex>, molim vas.<\/p>\n<h2 class=\"default-block__polling-title\">Kdo so ve\u010dji fanatiki? Podporniki:<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Monorepo<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Rust<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Napa\u010dna anketa \/ oboje<\/p>\n<\/li>\n<\/ul>\n<p>    33 uporabnikov je glasovalo. 13 uporabnikov se je vzdr\u017ealo.<br \/>\n<br \/>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/453958\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 OTUS. \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0432\u0430\u0448\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26181,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-34744","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0434\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:00:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:00:10+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Monorepozitoriji: prosim, da | ProHoster","description":"Prevod \u010dlanka je pripravljen za \u0161tudente.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0434\u043e | ProHoster","og:description":"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432.","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:00:10+00:00","article:modified_time":"2019-10-31T19:00:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34744","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 20:28:56","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:15:38","updated":"2026-01-21 20:28:56","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/34744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=34744"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/34744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/26181"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=34744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=34744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=34744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}