{"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\/et\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","title":{"rendered":"Monorepositooreid: palun, see on vajalik","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Monorepositooreid: palun, see on vajalik\" src=\"\/wp-content\/uploads\/2019\/05\/a973a60a06e7b336c08db26fa6d72149.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Artikli t\u00f5lge on ette valmistatud kursuse \u00fcli\u00f5pilaste jaoks <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/g5Rz\/\">\u00abDevOps praktikad ja t\u00f6\u00f6riistad\u00bb<\/a><\/noindex> OTUS hariduse projektis.<\/em><\/p>\n<p>Te peate valima monorepo, kuna see soodustab teie meeskondades l\u00e4bipaistvust ja kollektiivset vastutust, eriti meeskondade kasvu korral. Igal juhul peate investeerima t\u00f6\u00f6riistadesse, kuid alati on parem, kui vaikimisi k\u00e4itumine on see, mida soovite oma meeskondades n\u00e4ha. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h1 id=\"pochemu-my-govorim-ob-etom\">Miks me sellest r\u00e4\u00e4gime?<\/h1>\n<p><\/p>\n<p>Matt Klein kirjutas artikli <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@mattklein123\/monorepos-please-dont-e9a279be011b\">\u00abMonorepos: Palun \u00e4rge tehke seda!\u00bb<\/a><\/noindex>\u200a (t\u00f5lkija m\u00e4rkuseks: t\u00f5lge Habr's) <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/435306\/\">\u00abMonorepos: palun \u00e4rge tehke seda\u00bb<\/a><\/noindex>). Mulle meeldib Matt, ma arvan, et ta on v\u00e4ga tark ja te peaksite lugema tema seisukohta. Alguses avaldas ta Twitteris k\u00fcsitluse:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Monorepositooreid: palun, see on vajalik\" src=\"\/wp-content\/uploads\/2019\/05\/edbc65b80288045e08394821c17a77a9.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>T\u00f5lge:<\/em><br \/>\n<em>Selle uusaasta p\u00e4eva puhul kavatsen vaielda, kui absurdne on monoreposid kasutada. 2019. aasta algas m\u00e4rkamatult. Sellega seoses pakun teile k\u00fcsitluse. Kes on suured f\u00e4nnid? Pooldajad:<\/em><br \/>\n\u2014 <em>Monorepo<\/em><br \/>\n\u2014 <em>Rustis<\/em><br \/>\n\u2014 <em>Vale k\u00fcsitlus \/ m\u00f5lemad<\/em><\/p>\n<p><\/p>\n<p>Minu vastus oli: \u00abMa olen sisuliselt m\u00f5lemad need inimesed\u00bb. Selle asemel, et r\u00e4\u00e4kida, kui uimastav on Rust, vaatame, miks ma arvan, et ta eksib monoreposide osas. Natuke enda kohta. Olen Chef Software'i tehniline direktor. Meil on umbes 100 inseneri, koodibaas, mis on umbes 11\u201312 aastat vana, ja 4 peamist toodet. Osad sellest koodist asuvad polirepos (minu algne positsioon), osad monorepos (minu praegune positsioon).<\/p>\n<p><\/p>\n<p>Enne kui hakkan: iga argument, mida siin esitlen, kehtib m\u00f5lema t\u00fc\u00fcbi hoidlate kohta. Minu arvates ei ole tehnilisi p\u00f5hjuseid, miks peaksite valima \u00fchte t\u00fc\u00fcpi hoidla \u00fcle teise. Saate mistahes l\u00e4henemist t\u00f6\u00f6le panna. Olen valmis sellest r\u00e4\u00e4kima, kuid mind ei huvita kunstlikud tehnilised p\u00f5hjused, miks \u00fcks \u00fcletab teist. <\/p>\n<p><\/p>\n<p>Ma n\u00f5ustun Matti seisukoha esimese osaga:<\/p>\n<p><\/p>\n<p><em>Sest suurel skaalal lahendab monorepo k\u00f5ik need samad probleemid, mida lahendab ka polirepo, kuid samal ajal provotseerib teid oma koodi tugevale sidususele ja n\u00f5uab uskumatuid j\u00f5upingutusi teie versioonihaldus s\u00fcsteemi skaleeritavuse suurendamiseks.<\/em><\/p>\n<p><\/p>\n<p>Teil peate lahendama samu probleeme, olgu te valikuks monoreposiitor v\u00f5i poli-reposiitor. Kuidas te v\u00e4ljalaskeid v\u00e4lja annate? Milline on teie l\u00e4henemine uuendustele? Tagasip\u00f6\u00f6rdumine? Projekti vahelised s\u00f5ltuvused? Millised arhitektuurilised stiilid on vastuv\u00f5etavad? Kuidas te haldate oma ehitus- ja testimisstruktuuri? Loend on l\u00f5pmatu. Ja te peate neid k\u00f5iki lahendama, kui kasvate. Tasuta juustu ei ole.<\/p>\n<p><\/p>\n<p>Ma arvan, et Matti argument sarnaneb paljude inseneride (ja juhtide) vaadete kohale, keda ma austan. See tuleb inseneri perspektiivist, kes t\u00f6\u00f6tab komponendi kallal, v\u00f5i meeskonna perspektiivist, mis t\u00f6\u00f6tab komponendi kallal. Te kuulete selliseid asju nagu:<\/p>\n<p><\/p>\n<ul>\n<li>Koodibaas on mahukas \u2014 mulle ei ole kogu see kraam vajalik.<\/li>\n<li>Seda on keerulisem testida, kuna pean kontrollima kogu seda kraami, mis mulle ei ole vajalik.<\/li>\n<li>Keerulisem on t\u00f6\u00f6tada v\u00e4liste s\u00f5ltuvustega.<\/li>\n<li>Mul on vaja oma versioonihalduss\u00fcsteeme.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ilmselt on k\u00f5ik need punktid p\u00f5hjendatud. See toimub m\u00f5lemas olukorras \u2014 poli-reposiitoris on mul oma kraam, peale selle, mida on vaja ehitamiseks\u2026 V\u00f5ib-olla pean veel rohkemat kraami. Seet\u00f5ttu loon \"lihtsalt\" t\u00f6\u00f6riistu, mis teevad kogu projekti lahti. V\u00f5i loon vale monoreposiitori alamsubmodulitega. Me v\u00f5iksime sellega terve p\u00e4eva ringi k\u00e4ia. Kuid ma arvan, et Matti argument j\u00e4tab t\u00e4helepanuta peamise p\u00f5hjuse, mida ma t\u00f5eliselt muutsin monoreposiitori kasuks:<\/p>\n<p><\/p>\n<h1 id=\"on-provociruet-obschenie-i-pokazyvaet-problemy\">See provotseerib suhtlemist ja n\u00e4itab probleeme.<\/h1>\n<p><\/p>\n<p>Kui me jagame repod, loome de facto koordineerimise ja l\u00e4bipaistvuse probleemi. See vastab sellele, kuidas me m\u00f5tleme meeskondadele (eriti sellele, kuidas eraldi liikmed neid m\u00f5istavad): me vastutame teatud komponendi eest. Me t\u00f6\u00f6tame suhtelises isolatsioonis. Piirid on fikseeritud minu meeskonna ja komponendi (-de) vahel, millega me t\u00f6\u00f6tame.<\/p>\n<p><\/p>\n<p>Kui arhitektuur muutub keerulisemaks, ei saa \u00fcks meeskond enam \u00fcksi sellega hakkama. Ainult v\u00e4ga v\u00e4hesed insenerid suudavad kogu s\u00fcsteemi oma peas hoida. Oletame, et te haldate \u00fchiseid komponente A, mida kasutavad meeskonnad B, C ja D. Meeskond A viib l\u00e4bi refaktoreerimise, parendab API-d ning muudab sisemise teostuse. Selle tulemusena on muudatused tagasisidek\u00f5lbmatud. Millist n\u00f5u annate?<\/p>\n<p><\/p>\n<ul>\n<li>Leia k\u00f5ik kohad, kus kasutatakse vana API-d.<\/li>\n<li>Kas on kohti, kus uut API-d ei saa kasutada?<\/li>\n<li>Kas saate parandada ja testida teisi komponente, et veenduda, et need ei purune?<\/li>\n<li>Kas need meeskonnad saavad teie muudatusi kohe kontrollida?<\/li>\n<\/ul>\n<p><\/p>\n<p>Pange t\u00e4hele, et need k\u00fcsimused ei s\u00f5ltu hoidla t\u00fc\u00fcbist. Teil on vaja leida meeskonnad B, C ja D. Te peate nendega r\u00e4\u00e4kima, v\u00e4lja selgitama nende ajakava ja prioriteedid. Loodame, et teete seda.<\/p>\n<p><\/p>\n<p>Tegelikult ei taha keegi sellega tegeleda. See on palju v\u00e4hem p\u00f5nev kui lihtsalt kuradi API parandamine. K\u00f5ik see on inimese ja keeruline. Pol\u00fchoidlas saate lihtsalt muudatusi teha, lasta need \u00fcle vaadata neil, kes selle komponendi kallal t\u00f6\u00f6tavad (t\u00f5en\u00e4oliselt mitte B, C v\u00f5i D), ja edasi liikuda. Meeskonnad B, C ja D saavad hetkel j\u00e4\u00e4da oma praegusele versioonile. Nad uuendavad, kui nad teie geniaalsust tunnustavad!<\/p>\n<p><\/p>\n<p>Monorepois nihkub vastutus vaikimisi. Meeskond A muudab oma komponenti ja kui nad ei ole ettevaatlikud, rikuvad nad kohe B, C ja D. See toob kaasa selle, et B, C ja D ilmuvad A uksele ja imestavad, miks meeskond A rikkus koostamist. See \u00f5petab A-le, et nad ei saa minu \u00fclaltoodud loendit vahele j\u00e4tta. Nad peavad r\u00e4\u00e4kima, millest nad kavatsevad teha. Kas B, C ja D saavad edasi liikuda? Mis siis, kui B ja C saavad, kuid D on tihedalt seotud vana algoritmi k\u00fclgefektidega?<\/p>\n<p><\/p>\n<p>Siis peame r\u00e4\u00e4kima sellest, kuidas me olukorrast v\u00e4lja p\u00e4\u00e4seme:<\/p>\n<p><\/p>\n<ol>\n<li>Toetage mitut sisemist API-d, samal ajal kui vana algoritm on m\u00e4rgistatud aegunuks, kuni D suudab selle kasutamise l\u00f5petada.<\/li>\n<li>Toetage mitut versiooni, \u00fcks vanadele liidesele, teine uuele.<\/li>\n<li>Kasutage muudatuste A v\u00e4ljaandmiseks viivitust kuni hetkeni, mil B, C ja D saavad selle koos vastu v\u00f5tta.<\/li>\n<\/ol>\n<p><\/p>\n<p>Oletame, et valisime 1, mitu API-d. Sel juhul on meil kaks t\u00fckki koodi. Vanem ja uuem. See on m\u00f5nes olukorras \u00fcsna mugav. Tagastame vanema koodi, m\u00e4rgime selle kasutusest k\u00f5rvaldatuks (deprecated) ja koosk\u00f5lastame selle eemaldamise ajakava meeskonnaga D. Sisuliselt on see sama nii poli kui ka monoreposiidi puhul.<\/p>\n<p><\/p>\n<p>Mitme versiooni vabastamiseks meil on vajalik haru. N\u00fc\u00fcd on meil kaks komponenti \u2014 A1 ja A2. Meeskonnad B ja C kasutavad A2, samas kui D kasutab A1. Me vajame, et iga komponent oleks vabastamiseks valmis, kuna enne kui D saab edasi liikuda, v\u00f5ivad olla vajalikud turvauuendused ja teiste t\u00f5rgete parandused. Polireposiitides saame selle peita pikaajalisse harusse, mis toimib h\u00e4sti. Monorepositories sunnime me koodi loomist uues moodulis. Meeskond D peab endiselt tegema muudatusi \u201evana\u201c komponendi osas. K\u00f5ik saavad n\u00e4ha hinda, mida me siin maksame \u2014 meil on n\u00fc\u00fcd kaks korda rohkem koodi ja k\u00f5ik parandused, mis rakendatakse A1 ja A2-le, peavad olema rakendatud ka m\u00f5lemale. Harudega t\u00f6\u00f6tamise l\u00e4henemisega polireposiitides on see peidetud cherry-pick'i alla. Peame hinda madalamaks, kuna seal ei ole dubleerimist. Praktikas on hind sama: peate looma, vabastama ja toetama kahte, p\u00f5him\u00f5tteliselt identset koodibaasi, kuni suudate \u00fche neist eemaldada. Erinevus on see, et monoreposiis tagab, et see valu on otsene ja n\u00e4htav. <strong>See on veel hullem ja see on hea.<\/strong><\/p>\n<p><\/p>\n<p>L\u00f5puks oleme j\u00f5udnud kolmanda punktini. V\u00e4ljalaske t\u00e4htaeg. On v\u00f5imalik, et A poolt tehtud muudatused parandavad A tiimi t\u00f6\u00f6d. Oluline, aga mitte kiire. Kas me saame lihtsalt oodata? Pol\u00fcrepoositooriumis suuname seda artefakti kindlakstegemise suunas. Loomulikult r\u00e4\u00e4gime sellest D tiimile. Lihtsalt j\u00e4\u00e4ge vana versiooni juurde, kuni catch-up teete! See valmistab ette m\u00e4ngu kartlikuks. A tiim t\u00f6\u00f6tab endiselt oma komponendi kallal, ignoreerides fakti, et D tiim kasutab \u00fcha aegumatumat versiooni (see on D tiimi probleem, nad on lollid). Samal ajal r\u00e4\u00e4gib D tiim halvasti A tiimi kohatu suhtumise \u00fcle koodi stabiilsusesse, kui nad sellest \u00fcldse r\u00e4\u00e4givad. Kuu jooksul m\u00f6\u00f6dub. L\u00f5puks otsustavad D tiim vaadata uuendamise v\u00f5imalust, aga A-s on muudatusi ainult juurde tulnud. A tiim ei m\u00e4leta peaaegu, millal ja kuidas nad D-t l\u00f5hkusid. Uuendamine on valusam ja v\u00f5tab rohkem aega. Mis t\u00f5ukab selle allapoole prioriteetide j\u00e4rjestust. Kuni p\u00e4eva, mil meil tekib A-s turvaprobleem, mis sunnib meid haru tegema. A tiim peab tagasi minema ajas, leidma hetke, mil D oli stabiilne, parandama seal probleemi ja valmistama selle v\u00e4ljalaskeks. <strong>See on de-fakto valik, mille inimesed teevad, ja see on kindlasti halvim.<\/strong> See tundub olevat hea nii A tiimi kui ka D jaoks, kuni me saame \u00fcksteist ignoreerida.<\/p>\n<p><\/p>\n<p>Monorepositoorses kolmas ei ole t\u00f5eliselt variant. Sa pead toimetulema olukorraga kahest viisist. Sa pead n\u00e4gema kahe v\u00e4ljalaske haru pidamise kulusid. \u00d5ppima end kaitsma tagasip\u00f6\u00f6rdumisuuenduste vastu. Aga k\u00f5ige t\u00e4htsam: <em>sa ei p\u00e4\u00e4se keerulisest vestlusest.<\/em><\/p>\n<p><\/p>\n<p>Minu kogemuse p\u00f5hjal, kui tiimid kasvavad, kaob v\u00f5ime hoida kogu s\u00fcsteemi meeles, ja see on k\u00f5ige olulisem osa. Pead parandama vastuolude n\u00e4htavust s\u00fcsteemis. Pead aktiivselt t\u00f6\u00f6tama, et sundida tiime oma komponente vaatamast eemale ning vaatama teiste tiimide ja tarbijate t\u00f6\u00f6d.<\/p>\n<p><\/p>\n<p>Jah, te saate luua t\u00f6\u00f6riistu, mis p\u00fc\u00fcavad probleemset polirepositooriumi lahendada. Kuid minu kogemus pideva tarnimise ja automatiseerimise alal suurtes ettev\u00f5tetes \u00fctleb mulle j\u00e4rgmist: vaikimisi k\u00e4itumine ilma t\u00e4iendavate t\u00f6\u00f6riistadeta on see, mida te eeldate n\u00e4gevat. <strong>Polirepositooriumi vaikimisi k\u00e4itumine on isoleerimine, see on kogu m\u00f5te. Monorepositooriumi vaikimisi k\u00e4itumine on \u00fchine vastutus ja l\u00e4bipaistvus, see on kogu m\u00f5te.<\/strong> M\u00f5lemal juhul kavatse ma luua t\u00f6\u00f6riista, mis aitab teravaid nurki siluda. Juhtkonnana valin ma alati monorepositooriumi, sest t\u00f6\u00f6riistad peaksid tugevdama kultuuri, mida ma soovin, ja kultuur tuleneb pisikestest otsustest ja meeskonna igap\u00e4evasest t\u00f6\u00f6st.<\/p>\n<p class=\"for_users_only_msg\">Ainult registreeritud kasutajad saavad k\u00fcsitluses osaleda. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Logige sisse<\/a><\/noindex>, palun.<\/p>\n<h2 class=\"default-block__polling-title\">Kes on suurimad fanaatikud? Toetajad:<\/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>                    Rustis<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Vale k\u00fcsitlus \/ m\u00f5lemad<\/p>\n<\/li>\n<\/ul>\n<p>    33 kasutajat h\u00e4\u00e4letasid. 13 kasutajat hoidusid.<br \/>\n<br \/>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Monorepositooriumid: palun, see on vajalik | ProHoster","description":"Artikli t\u00f5lge on koostatud \u00fcli\u00f5pilaste jaoks.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/34744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=34744"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/26181"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=34744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=34744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=34744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}