{"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\/ro\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","title":{"rendered":"Mono-repozitorii: v\u0103 rog, este necesar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Mono-repozitorii: v\u0103 rog, este necesar\" src=\"\/wp-content\/uploads\/2019\/05\/a973a60a06e7b336c08db26fa6d72149.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Articolul este tradus pentru studen\u021bii cursului <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/g5Rz\/\">\u201ePracticile \u0219i instrumentele DevOps\u201d<\/a><\/noindex> din proiectul educa\u021bional OTUS.<\/em><\/p>\n<p>Trebuie s\u0103 alegi un monorepository, pentru c\u0103 comportamentul pe care acesta \u00eel \u00eencurajeaz\u0103 \u00een echipele tale este transparen\u021ba \u0219i responsabilitatea colectiv\u0103, mai ales pe m\u0103sur\u0103 ce echipele cresc. Oricum va trebui s\u0103 investe\u0219ti \u00een instrumente, dar \u00eentotdeauna este mai bine c\u00e2nd comportamentul implicit este cel pe care vrei s\u0103-l vezi \u00een echipele tale. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h1 id=\"pochemu-my-govorim-ob-etom\">De ce discut\u0103m despre asta?<\/h1>\n<p><\/p>\n<p>Matt Klein a scris un articol <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@mattklein123\/monorepos-please-dont-e9a279be011b\">\u201eMonorepos: Please don\u2019t!\u201d<\/a><\/noindex>\u200a (nota traductorului: traducerea pe Habrahabr <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/435306\/\">\u201eMonorepository: te rog, nu!\u201d<\/a><\/noindex>). \u00cemi place Matt, cred c\u0103 este foarte inteligent \u0219i ar trebui s\u0103-i cite\u0219ti perspectiva. Ini\u021bial, el a publicat un sondaj pe Twitter:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mono-repozitorii: v\u0103 rog, este necesar\" src=\"\/wp-content\/uploads\/2019\/05\/edbc65b80288045e08394821c17a77a9.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Traducere:<\/em><br \/>\n<em>\u00cen aceast\u0103 zi de Anul Nou, voi argumenta c\u00e2t de ridicole sunt monorepository-urile. Anul 2019 a \u00eenceput f\u0103r\u0103 multe fapte. \u00cen spiritul acesta, v\u0103 ofer un sondaj. Cine sunt marii fani? Sus\u021bin\u0103tori:<\/em><br \/>\n\u2014 <em>Monorepository<\/em><br \/>\n\u2014 <em>Rust<\/em><br \/>\n\u2014 <em>Sondaj gre\u0219it \/ \u0219i una \u0219i alta<\/em><\/p>\n<p><\/p>\n<p>R\u0103spunsul meu a fost: \u201eSunt literalmente ambele aceste persoane\u201d. \u00cen loc s\u0103 discut\u0103m despre c\u00e2t de drog este Rust, haide\u021bi s\u0103 vedem de ce cred c\u0103 se \u00een\u0219al\u0103 \u00een leg\u0103tur\u0103 cu monorepository-urile. Pu\u021bin despre mine. Sunt director tehnic la Chef Software. Avem aproximativ 100 de ingineri, o baz\u0103 de cod de aproximativ 11\u201312 ani \u0219i 4 produse principale. O parte din acest cod se afl\u0103 \u00eentr-un repository poli (pozi\u021bia mea de start), o parte \u00een monorepository (pozi\u021bia mea actual\u0103).<\/p>\n<p><\/p>\n<p>\u00cenainte s\u0103 \u00eencep: fiecare argument pe care \u00eel voi aduce aici se va aplica ambelor tipuri de repository. \u00cen opinia mea, nu exist\u0103 motive tehnice pentru care ar trebui s\u0103 alegi un tip de repository sau altul. Po\u021bi face s\u0103 func\u021bioneze orice abordare. Sunt deschis s\u0103 discut despre asta, dar nu m\u0103 intereseaz\u0103 motivele tehnice artificiale pentru care unul este superior altuia. <\/p>\n<p><\/p>\n<p>Sunt de acord cu prima parte a punctului de vedere al lui Matt:<\/p>\n<p><\/p>\n<p><em>Pentru c\u0103 la scar\u0103 mare, un monorepository va rezolva toate acelea\u0219i probleme pe care le rezolv\u0103 \u0219i un repository poli, dar va provoca, de asemenea, o leg\u0103tura puternic\u0103 a codului t\u0103u \u0219i va necesita un efort incredibil pentru a cre\u0219te scalabilitatea sistemului t\u0103u de control al versiunilor.<\/em><\/p>\n<p><\/p>\n<p>Ve\u021bi trebuie s\u0103 rezolva\u021bi probleme similare, indiferent dac\u0103 alege\u021bi un monorepo sau un polirepo. Cum lansa\u021bi versiunile? Care este abordarea dvs. pentru actualiz\u0103ri? Compatibilitate invers\u0103? Dependen\u021be \u00eencruci\u0219ate ale proiectelor? Ce stiluri arhitecturale sunt acceptabile? Cum gestiona\u021bi infrastructura de construire \u0219i testare? Lista este nesf\u00e2r\u0219it\u0103. \u0218i ve\u021bi rezolva toate acestea pe m\u0103sur\u0103 ce cre\u0219te\u021bi. Nu exist\u0103 br\u00e2nz\u0103 gratuit\u0103.<\/p>\n<p><\/p>\n<p>Cred c\u0103 argumentul lui Matt este similar cu p\u0103rerile \u00eemp\u0103rt\u0103\u0219ite de mul\u021bi ingineri (\u0219i manageri) pe care \u00eei respect. Vine din perspectiva unui inginer care lucreaz\u0103 la un component sau a unei echipe care lucreaz\u0103 la acesta. Asculta\u021bi lucruri precum:<\/p>\n<p><\/p>\n<ul>\n<li>Codul este greoi \u2014 nu am nevoie de tot acest gunoi.<\/li>\n<li>Este mai greu de testat, deoarece trebuie s\u0103 verific tot acest gunoi de care nu am nevoie.<\/li>\n<li>Este mai complicat s\u0103 lucrez cu dependen\u021be externe.<\/li>\n<li>Am nevoie de propriile mele sisteme virtuale de gestionare a versiunilor.<\/li>\n<\/ul>\n<p><\/p>\n<p>Cu siguran\u021b\u0103, toate aceste puncte sunt valide. Acest lucru se \u00eent\u00e2mpl\u0103 \u00een ambele cazuri \u2014 \u00een polirepo am gunoiul meu, pe l\u00e2ng\u0103 cel necesar pentru construire\u2026 S-ar putea s\u0103 mai am nevoie \u0219i de alte lucruri. A\u0219adar, \u00abdoar\u00bb creez unelte care fac checkout-ul \u00eentregului proiect. Sau creez un fals monorepo cu submodule. Am putea discuta toat\u0103 ziua despre asta. Dar cred c\u0103 argumentul lui Matt trece cu vederea motivul principal, pe care l-am \u00eentors destul de mult \u00een favoarea monorepo-ului:<\/p>\n<p><\/p>\n<h1 id=\"on-provociruet-obschenie-i-pokazyvaet-problemy\">\u00cendeamn\u0103 la comunicare \u0219i eviden\u021biaz\u0103 problemele.<\/h1>\n<p><\/p>\n<p>C\u00e2nd \u00eemp\u0103r\u021bim repositoarele, de facto cre\u0103m o problem\u0103 de coordonare \u0219i transparen\u021b\u0103. Asta corespunde modului \u00een care g\u00e2ndim despre echipe (\u00een special modului \u00een care g\u00e2ndesc membrii individuali): suntem responsabili pentru un anumit component. Lucr\u0103m \u00een izolare relativ\u0103. Grani\u021bele sunt fixate pe echipa mea \u0219i componenta(ele) la care lucr\u0103m.<\/p>\n<p><\/p>\n<p>Pe m\u0103sur\u0103 ce arhitectura devine mai complex\u0103, o singur\u0103 echip\u0103 nu poate gestiona totul singur\u0103. Foarte pu\u021bini ingineri p\u0103streaz\u0103 \u00eentreaga sistem\u0103 \u00een minte. S\u0103 presupunem c\u0103 gestionezi componenta comun\u0103 A, care este utilizat\u0103 de echipele B, C \u0219i D. Echipa A face refactorizarea, \u00eembun\u0103t\u0103\u021be\u0219te API-ul \u0219i schimb\u0103, de asemenea, implementarea intern\u0103. Drept urmare, modific\u0103rile devin incompatibile cu versiuni anterioare. Ce sfaturi i-ai oferi?<\/p>\n<p><\/p>\n<ul>\n<li>G\u0103se\u0219te toate locurile unde este utilizat vechiul API.<\/li>\n<li>Exist\u0103 locuri unde noul API nu poate fi utilizat?<\/li>\n<li>Po\u021bi corecta \u0219i testa celelalte componente pentru a te asigura c\u0103 nu se defecteaz\u0103?<\/li>\n<li>\u00ce\u021bi pot verifica aceste echipe modific\u0103rile chiar acum?<\/li>\n<\/ul>\n<p><\/p>\n<p>Re\u021bine c\u0103 aceste \u00eentreb\u0103ri nu depind de tipul de depozit. Va trebui s\u0103 g\u0103se\u0219ti echipele B, C \u0219i D. Va trebui s\u0103 vorbe\u0219ti cu ele, s\u0103 afli timpul necesar, s\u0103 \u00een\u021belegi priorit\u0103\u021bile lor. Sper\u0103m c\u0103 vei face acest lucru.<\/p>\n<p><\/p>\n<p>De fapt, nimeni nu \u00ee\u0219i dore\u0219te s\u0103 se ocupe de asta. Este mult mai pu\u021bin captivant dec\u00e2t pur \u0219i simplu s\u0103 repari acel nenorocit de API. Totul este uman \u0219i complicat. \u00centr-un depozit poli, po\u021bi face pur \u0219i simplu modific\u0103ri, le dai spre revizuire celor care lucreaz\u0103 la aceast\u0103 component\u0103 (probabil nu B, C sau D) \u0219i s\u0103 mergi mai departe. Echipele B, C \u0219i D pot r\u0103m\u00e2ne momentan pe versiunea lor actual\u0103. Se vor actualiza atunci c\u00e2nd \u00ee\u0219i vor da seama de genialitatea ta!<\/p>\n<p><\/p>\n<p>\u00centr-un depozit monorepo, responsabilitatea se schimb\u0103 implicit. Echipa A \u00ee\u0219i schimb\u0103 componenta \u0219i, dac\u0103 nu este atent\u0103, sparge imediat B, C \u0219i D. Acest lucru face ca B, C \u0219i D s\u0103 apar\u0103 la u\u0219a echipei A, mir\u00e2ndu-se de ce echipa A a stricat compilarea. Acest lucru \u00eei \u00eenva\u021b\u0103 pe A c\u0103 nu pot s\u0103 ignore lista mea de mai sus. Trebuie s\u0103 discute despre ceea ce urmeaz\u0103 s\u0103 fac\u0103. Pot B, C \u0219i D s\u0103 progreseze? Dar dac\u0103 B \u0219i C pot, dar D a fost str\u00e2ns legat de efectul secundar al comportamentului vechiului algorith?<\/p>\n<p><\/p>\n<p>Apoi trebuie s\u0103 discut\u0103m despre cum putem ie\u0219i din aceast\u0103 situa\u021bie:<\/p>\n<p><\/p>\n<ol>\n<li>S\u0103 suport\u0103m mai multe API-uri interne, \u00een timp ce vechiul algoritm va fi marcat ca depreciat, p\u00e2n\u0103 c\u00e2nd D nu va mai putea s\u0103-l foloseasc\u0103.<\/li>\n<li>S\u0103 suport\u0103m mai multe versiuni de lansare, una cu interfa\u021ba veche, una cu cea nou\u0103.<\/li>\n<li>Am\u00e2narea lans\u0103rii modific\u0103rilor A p\u00e2n\u0103 c\u00e2nd simultan B, C \u0219i D pot s\u0103 le accepte.<\/li>\n<\/ol>\n<p><\/p>\n<p>S\u0103 presupunem c\u0103 am ales 1, c\u00e2teva API. \u00cen acest caz, avem dou\u0103 buc\u0103\u021bi de cod. Veche \u0219i nou\u0103. Destul de convenabil \u00een anumite situa\u021bii. Revenim la vechiul cod, \u00eel marc\u0103m ca fiind \u00eenvechit (deprecated) \u0219i stabilim un calendar pentru eliminarea acestuia \u00eempreun\u0103 cu echipa D. Practic, este identic pentru poli \u0219i pentru monorepo.<\/p>\n<p><\/p>\n<p>Pentru lansarea mai multor versiuni, avem nevoie de un branch. Acum avem dou\u0103 componente - A1 \u0219i A2. Echipele B \u0219i C folosesc A2, iar D folose\u0219te A1. Trebuie s\u0103 ne asigur\u0103m c\u0103 fiecare component\u0103 este gata pentru lansare, deoarece, \u00eenainte ca D s\u0103 poat\u0103 avansa, pot fi necesare actualiz\u0103ri de securitate \u0219i remedieri pentru alte bug-uri. \u00cen polirepo, putem ascunde acest lucru \u00eentr-un branch pe termen lung, care se simte bine. \u00cen monorepo, for\u021b\u0103m crearea codului \u00eentr-un nou modul. Echipa D va trebui, de asemenea, s\u0103 fac\u0103 modific\u0103ri la componenta \u201eveche\u201d. Toat\u0103 lumea poate vedea costul pe care \u00eel pl\u0103tim aici - acum avem de dou\u0103 ori mai mult cod, \u0219i orice remedii pentru bug-uri aplicate la A1 \u0219i A2 trebuie aplicate pentru am\u00e2ndou\u0103. Cu abordarea utiliz\u0103rii branch-urilor \u00een polirepo, acest lucru este ascuns prin cherry-pick. Consider\u0103m costul ca fiind mai mic, deoarece nu exist\u0103 duplicare. Din punct de vedere practic, costul este identic: ve\u021bi crea, lansa \u0219i men\u021bine dou\u0103 baze de cod, \u00een mare parte identice, p\u00e2n\u0103 c\u00e2nd ve\u021bi putea elimina una dintre ele. Diferen\u021ba este c\u0103, \u00een monorepo, aceast\u0103 durere este direct\u0103 \u0219i vizibil\u0103. <strong>Este \u0219i mai r\u0103u, \u0219i asta e bine.<\/strong><\/p>\n<p><\/p>\n<p>\u00cen sf\u00e2r\u0219it, am ajuns la al treilea punct. \u00cent\u00e2rzierea lans\u0103rii. Este posibil ca modific\u0103rile aduse de A s\u0103 \u00eembun\u0103t\u0103\u021beasc\u0103 via\u021ba echipei A. Important, dar nu urgent. Putem oare pur \u0219i simplu s\u0103 \u00eent\u00e2rziem? \u00cen repositoarele de tip monorepo, noi \u00eencuraj\u0103m consolidarea artefactelor. Desigur, discut\u0103m asta cu echipa D. Doar r\u0103m\u00e2ne\u021bi la versiunea veche p\u00e2n\u0103 ajunge\u021bi din urm\u0103! Aceasta seteaz\u0103 o mentalitate de fric\u0103. Echipa A continu\u0103 s\u0103 lucreze la componenta lor, ignor\u00e2nd faptul c\u0103 echipa D folose\u0219te o versiune din ce \u00een ce mai \u00eenvechit\u0103 (este problema echipei D, sunt nepricepu\u021bi). \u00centre timp, echipa D vorbe\u0219te despre comportamentul imprudent al echipei A fa\u021b\u0103 de stabilitatea codului, dac\u0103 discut\u0103 despre asta. Trec luni. \u00cen cele din urm\u0103, echipa D decide s\u0103 analizeze posibilitatea actualiz\u0103rii, dar modific\u0103rile din A au devenit doar mai numeroase. Echipa A \u00ee\u0219i aminte\u0219te cu greu c\u00e2nd \u0219i cum au stricat D. Actualizarea devine mai dureroas\u0103 \u0219i va necesita mai mult timp. Ceea ce \u00eei trimite mai departe \u00een josul listei de priorit\u0103\u021bi. P\u00e2n\u0103 \u00een ziua \u00een care apare o problem\u0103 de securitate \u00een A, care ne face s\u0103 facem o ramificare. Echipa A trebuie s\u0103 c\u0103l\u0103toreasc\u0103 \u00eenapoi \u00een timp, s\u0103 g\u0103seasc\u0103 momentul \u00een care D era stabil, s\u0103 repare problema de acolo \u0219i s\u0103 o preg\u0103teasc\u0103 pentru lansare. <strong>Aceasta este, de facto, alegerea pe care o fac oamenii \u0219i este, f\u0103r\u0103 \u00eendoial\u0103, cea mai proast\u0103.<\/strong> Se pare c\u0103 este bine at\u00e2t pentru echipa A, c\u00e2t \u0219i pentru D, c\u00e2t timp putem s\u0103 ne ignor\u0103m unii pe al\u021bii.<\/p>\n<p><\/p>\n<p>\u00cen monorepo, a treia op\u021biune nu este cu adev\u0103rat o op\u021biune. E\u0219ti for\u021bat s\u0103 gestionezi situa\u021bia \u00een unul dintre cele dou\u0103 moduri. Trebuie s\u0103 vezi costurile de a avea dou\u0103 ramuri de lansare. S\u0103 \u00eenve\u021bi s\u0103 te protejezi de actualiz\u0103ri care rup compatibilitatea \u00eenapoi. Dar cel mai important: <em>nu po\u021bi evita o conversa\u021bie dificil\u0103.<\/em><\/p>\n<p><\/p>\n<p>Din experien\u021ba mea, atunci c\u00e2nd echipele devin mari, nu mai exist\u0103 posibilitatea de a \u021bine \u00een minte \u00eentregul sistem, iar aceasta este cea mai important\u0103 parte. Trebuie s\u0103 \u00eembun\u0103t\u0103\u021be\u0219ti vizibilitatea dezacordurilor din sistem. Trebuie s\u0103 lucrezi activ pentru a determina echipele s\u0103 \u00ee\u0219i \u00eendrepte aten\u021bia de la componentele lor \u0219i s\u0103 se uite la munca celorlalte echipe \u0219i a consumatorilor.<\/p>\n<p><\/p>\n<p>Da, pute\u021bi crea instrumente care s\u0103 \u00eencerce s\u0103 rezolve problema polirepozitoriilor. Dar experien\u021ba mea \u00een livrarea continu\u0103 \u0219i automatizare \u00een \u00eentreprinderi mari \u00eemi spune urm\u0103toarele: comportamentul implicit, f\u0103r\u0103 utilizarea unor instrumente suplimentare, este ceea ce te a\u0219tep\u021bi s\u0103 vezi. <strong>Comportamentul implicit al polirepozitoriului este izola\u021bia, acesta fiind \u00eentregul punct. Comportamentul implicit al monorepozitoriului este responsabilitatea comun\u0103 \u0219i transparen\u021ba, acesta fiind \u00eentregul punct.<\/strong> \u00cen ambele cazuri, am de g\u00e2nd s\u0103 creez un instrument care s\u0103 atenueze col\u021burile ascu\u021bite. Ca lider, voi alege monorepozitoul de fiecare dat\u0103, deoarece instrumentele ar trebui s\u0103 \u00eent\u0103reasc\u0103 cultura pe care o doresc, iar cultura provine din decizii mici \u0219i din munca zilnic\u0103 a echipei.<\/p>\n<p class=\"for_users_only_msg\">Numai utilizatorii \u00eenregistra\u021bi pot participa la sondaj. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Conecta\u021bi-v\u0103<\/a><\/noindex>, v\u0103 rug\u0103m.<\/p>\n<h2 class=\"default-block__polling-title\">Cine sunt mai mari fani? Sus\u021bin\u0103torii:<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Monorepository<\/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>                    Sondaj gre\u0219it \/ \u0219i una \u0219i alta<\/p>\n<\/li>\n<\/ul>\n<p>    Au votat 33 de utilizatori. 13 utilizatori s-au ab\u021binut.<br \/>\n<br \/>Sursa: <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.2.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\/ro\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Monorepozi\u021bii: v\u0103 rog, e nevoie | ProHoster","description":"Traducerea articolului este preg\u0103tit\u0103 pentru studen\u021bi.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/34744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=34744"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/34744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/26181"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=34744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=34744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=34744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}