{"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\/sq\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","title":{"rendered":"Monorepozita: ju lutem, e nevojshme","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Monorepozita: ju lutem, e nevojshme\" src=\"\/wp-content\/uploads\/2019\/05\/a973a60a06e7b336c08db26fa6d72149.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>P\u00ebrkthimi i artikullit \u00ebsht\u00eb p\u00ebrgatitur p\u00ebr student\u00ebt e kursit <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/g5Rz\/\">\u00abPraktikat dhe mjetet DevOps\u00bb<\/a><\/noindex> n\u00eb projektin arsimor OTUS.<\/em><\/p>\n<p>Duhet t\u00eb zgjidhni nj\u00eb monorepozit t\u00eb vet\u00ebm, sepse sjellja q\u00eb ai inkurajon n\u00eb ekipet tuaja \u00ebsht\u00eb transparenca dhe p\u00ebrgjegj\u00ebsia kolektive, sidomos me rritjen e ekipeve. Megjithat\u00eb, do t'ju duhet t\u00eb investoni n\u00eb mjete, por gjithmon\u00eb \u00ebsht\u00eb m\u00eb mir\u00eb kur sjellja e paracaktuar \u00ebsht\u00eb ajo q\u00eb doni t\u00eb shihni n\u00eb ekipet tuaja. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h1 id=\"pochemu-my-govorim-ob-etom\">Pse po flasim p\u00ebr k\u00ebt\u00eb?<\/h1>\n<p><\/p>\n<p>Matt Klein shkroi nj\u00eb artikull <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@mattklein123\/monorepos-please-dont-e9a279be011b\">\u00abMonorepos: Ju lutem, mos e b\u00ebni!\u00bb<\/a><\/noindex>\u200a (sh\u00ebnim i p\u00ebrkthyesit: p\u00ebrkthimi n\u00eb Habr\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/435306\/\">\u00abMonorepozitat: ju lutem mos e b\u00ebni\u00bb<\/a><\/noindex>). M\u00eb p\u00eblqen Matti, mendoj se \u00ebsht\u00eb shum\u00eb i men\u00e7ur dhe duhet ta lexoni pik\u00ebpamjen e tij. Fillimisht ai publikoi nj\u00eb anket\u00eb n\u00eb Twitter:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Monorepozita: ju lutem, e nevojshme\" src=\"\/wp-content\/uploads\/2019\/05\/edbc65b80288045e08394821c17a77a9.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>P\u00ebrkthimi:<\/em><br \/>\n<em>N\u00eb k\u00ebt\u00eb dit\u00eb t\u00eb Vitit t\u00eb Ri, un\u00eb do t\u00eb debatoj se sa absurde jan\u00eb monorepozitat. Vitit 2019 filloi pa zhurm\u00eb. N\u00eb k\u00ebt\u00eb frym\u00eb, ju propozoj nj\u00eb anket\u00eb. Kush \u00ebsht\u00eb nj\u00eb fanatik i madh? Mb\u00ebshtet\u00ebsit:<\/em><br \/>\n\u2014 <em>Monorepozita<\/em><br \/>\n\u2014 <em>Rust<\/em><br \/>\n\u2014 <em>Anketa e gabuar \/ t\u00eb dyja<\/em><\/p>\n<p><\/p>\n<p>P\u00ebrgjigja ime ishte: \u00abUn\u00eb n\u00eb fakt jam k\u00ebto dy persona\u00bb. N\u00eb vend q\u00eb t\u00eb flasim se sa \u00ebsht\u00eb nj\u00eb drog\u00eb Rust, le t\u00eb kuptojm\u00eb pse mendoj se ai \u00ebsht\u00eb gabim p\u00ebr monorepozitat. Pak p\u00ebr veten time. Jam drejtor teknik n\u00eb Chef Software. Kemi rreth 100 inxhinier\u00eb, nj\u00eb baz\u00eb kodi q\u00eb \u00ebsht\u00eb rreth 11-12 vje\u00e7are dhe 4 produkte kryesore. Disa nga ky kod ndodhet n\u00eb polirepozita (pozita ime fillestare), disa n\u00eb monorepozita (pozita ime aktuale).<\/p>\n<p><\/p>\n<p>Para se t\u00eb filloj: \u00e7do argument q\u00eb do t\u00eb paraqes k\u00ebtu do t\u00eb aplikohet n\u00eb t\u00eb dy llojet e repozitave. N\u00eb mendimin tim, nuk ka arsye teknike p\u00ebr t\u00eb cilat duhet t\u00eb zgjidhni nj\u00eb lloj ose tjetrin. Ju mund ta b\u00ebni t\u00eb funksionoj\u00eb \u00e7do qasje. Jam i lumtur t\u00eb flas p\u00ebr k\u00ebt\u00eb, por nuk m\u00eb interesojn\u00eb arsyet teknike artificiale p\u00ebrse nj\u00ebra \u00ebsht\u00eb m\u00eb e mir\u00eb se tjetra. <\/p>\n<p><\/p>\n<p>Jam dakord me pjes\u00ebn e par\u00eb t\u00eb pik\u00ebpamjes s\u00eb Mattit:<\/p>\n<p><\/p>\n<p><em>Sepse n\u00eb nj\u00eb shkall\u00eb t\u00eb madhe, monorepozita do t\u00eb zgjidh\u00eb t\u00eb nj\u00ebjtat probleme q\u00eb zgjidh edhe polirepozita, por duke ju nxitur n\u00eb lidhshm\u00ebri m\u00eb t\u00eb fort\u00eb t\u00eb kodit tuaj dhe k\u00ebrkuar p\u00ebrpjekje t\u00eb pabesueshme p\u00ebr t\u00eb rritur shkall\u00ebzueshm\u00ebrin\u00eb e sistemit tuaj t\u00eb kontrollit t\u00eb versioneve.<\/em><\/p>\n<p><\/p>\n<p>Do t\u00eb keni p\u00ebr t\u00eb zgjidhur t\u00eb nj\u00ebjtat probleme, pavar\u00ebsisht n\u00ebse zgjidhni nj\u00eb monorepo ose nj\u00eb polirepo. Si i l\u00ebshoni versionet? \u00c7far\u00eb qasje keni ndaj p\u00ebrdit\u00ebsimeve? Kompatibiliteti mbrapsht? Var\u00ebsit\u00eb nd\u00ebrmjet projekteve? Cilat stile arkitekturore jan\u00eb t\u00eb pranueshme? Si menaxhoni infrastruktur\u00ebn tuaj t\u00eb nd\u00ebrtimit dhe testimit? Lista \u00ebsht\u00eb e pafund. Dhe do i zgjidhni t\u00eb gjitha k\u00ebto gjat\u00eb rritjes tuaj. Qengji falas nuk ekziston.<\/p>\n<p><\/p>\n<p>Mendoj se argumenti i Matt \u00ebsht\u00eb i ngjash\u00ebm me pik\u00ebpamjet q\u00eb ndajn\u00eb shum\u00eb inxhinier\u00eb (dhe menaxher\u00eb) q\u00eb respektoj. Kjo ndodh nga perspektiva e nj\u00eb inxhinieri q\u00eb punon mbi nj\u00eb komponent, ose t\u00eb nj\u00eb ekipi q\u00eb punon mbi nj\u00eb komponent. Ju d\u00ebgjoni gj\u00ebra t\u00eb tilla si:<\/p>\n<p><\/p>\n<ul>\n<li>Baza e kodit \u00ebsht\u00eb e ngarkuar \u2014 nuk m\u00eb nevojitet t\u00ebr\u00eb kjo mbetje.<\/li>\n<li>\u00cbsht\u00eb m\u00eb e komplikuar t\u00eb testohet, sepse duhet t\u00eb kontrolloj gjith\u00eb k\u00ebt\u00eb mbetje q\u00eb nuk m\u00eb nevojitet.<\/li>\n<li>\u00cbsht\u00eb m\u00eb e v\u00ebshtir\u00eb t\u00eb punosh me var\u00ebsit\u00eb e jashtme.<\/li>\n<li>M\u00eb duhen sistemet e mia t\u00eb menaxhimit t\u00eb versioneve virtuale.<\/li>\n<\/ul>\n<p><\/p>\n<p>Pa dyshim, t\u00eb gjitha k\u00ebto pika jan\u00eb t\u00eb arsyeshme. Kjo ndodh n\u00eb t\u00eb dy rastet \u2014 n\u00eb nj\u00eb polirepo un\u00eb kam mbetjet e mia, p\u00ebrve\u00e7 atyre q\u00eb nevojiten p\u00ebr nd\u00ebrtim\u2026 Mund t\u00eb kem nevoj\u00eb edhe p\u00ebr mbetje t\u00eb tjera. Prandaj \u00abthjesht\u00bb krijoj mjete q\u00eb b\u00ebjn\u00eb checkout t\u00eb gjith\u00eb projektit. Ose krijoj nj\u00eb monorepo t\u00eb rreme me submodule. Mund ta diskutojm\u00eb gjith\u00eb dit\u00ebn rreth k\u00ebsaj. Por mendoj se argumenti i Matt kalon p\u00ebrtej shkakut kryesor q\u00eb un\u00eb e kam rrehur fort n\u00eb favor t\u00eb nj\u00eb monorepo:<\/p>\n<p><\/p>\n<h1 id=\"on-provociruet-obschenie-i-pokazyvaet-problemy\">Ai provokon komunikimin dhe tregon problemet.<\/h1>\n<p><\/p>\n<p>Kur ndajm\u00eb repot, n\u00eb fakt krijojm\u00eb nj\u00eb problem koordinimi dhe transparence. Kjo p\u00ebrputhet me m\u00ebnyr\u00ebn se si mendojm\u00eb p\u00ebr ekipet (sidomos se si mendojn\u00eb pjes\u00ebtar\u00ebt e ve\u00e7ant\u00eb): ne jemi p\u00ebrgjegj\u00ebs p\u00ebr nj\u00eb komponent t\u00eb caktuar. Ne punojm\u00eb n\u00eb nj\u00eb izolim relativ. Kufijt\u00eb jan\u00eb t\u00eb fiksohen n\u00eb ekipin tim dhe komponentin(-et) mbi t\u00eb cilat punojm\u00eb.<\/p>\n<p><\/p>\n<p>Kur arkitektura b\u00ebhet m\u00eb e komplikuar, nj\u00eb ekip nuk mund ta menaxhoj\u00eb m\u00eb at\u00eb vet\u00ebm. Shum\u00eb pak inxhinier\u00eb e mbajn\u00eb t\u00ebr\u00eb sistemin n\u00eb mend. Le t\u00eb themi se ju menaxhoni komponentin ortak A, i cili p\u00ebrdoret nga ekipet B, C dhe D. Ekipi A b\u00ebn refaktorizimin, p\u00ebrmir\u00ebson API dhe ndryshon implementimin e brendsh\u00ebm. Si rezultat, ndryshimet jan\u00eb p\u00ebrs\u00ebri t\u00eb pabashk\u00ebpunueshme. \u00c7far\u00eb k\u00ebshilloni q\u00eb t'i jepni?<\/p>\n<p><\/p>\n<ul>\n<li>Gjeni t\u00eb gjitha vendet ku p\u00ebrdoret API i vjet\u00ebr.<\/li>\n<li>A ka vende ku nuk mund t\u00eb p\u00ebrdoret API i ri?<\/li>\n<li>A mund t'i korrigjoni dhe t'i testoni komponent\u00ebt e tjer\u00eb p\u00ebr t'u siguruar q\u00eb ata nuk do t\u00eb prishen?<\/li>\n<li>A mund t\u00eb kontrollojn\u00eb k\u00ebto ekipe ndryshimet tuaja tani?<\/li>\n<\/ul>\n<p><\/p>\n<p>Kujdes, k\u00ebto pyetje nuk varen nga tipi i repositorit. Ju duhet t\u00eb gjeni ekipet B, C dhe D. Ju duhet t\u00eb flisni me ta, t\u00eb kuptoni koh\u00ebn dhe t\u00eb kuptoni prioritetet e tyre. T\u00eb pakt\u00ebn shpresojm\u00eb q\u00eb ju do ta b\u00ebni k\u00ebt\u00eb.<\/p>\n<p><\/p>\n<p>N\u00eb t\u00eb v\u00ebrtet\u00eb, askush nuk do t\u00eb donte ta b\u00ebnte k\u00ebt\u00eb. Kjo \u00ebsht\u00eb shum\u00eb m\u00eb pak e t\u00ebrheq\u00ebse se thjesht t\u00eb korrigjoni nj\u00eb API t\u00eb tire. E gjith\u00eb kjo \u00ebsht\u00eb njer\u00ebzore dhe e nd\u00ebrlikuar. N\u00eb nj\u00eb poli-repositor, ju thjesht mund t\u00eb b\u00ebni ndryshime, t'i jepni p\u00ebr kontroll atyre q\u00eb punojn\u00eb mbi k\u00ebt\u00eb komponent (ndoshta jo B, C ose D), dhe t\u00eb shkoni p\u00ebrpara. Ekipet B, C dhe D mund t\u00eb q\u00ebndrojn\u00eb n\u00eb versionin e tyre aktual. Ata do t\u00eb azhurnohen kur t\u00eb kuptojn\u00eb gjenialitetin tuaj!<\/p>\n<p><\/p>\n<p>N\u00eb nj\u00eb mono-repositor, p\u00ebrgjegj\u00ebsia l\u00ebviz automatikisht. Ekipi A nd\u00ebrron komponentin e tij dhe, n\u00ebse nuk \u00ebsht\u00eb i kujdessh\u00ebm, menj\u00ebher\u00eb prish B, C dhe D. Kjo b\u00ebn q\u00eb B, C dhe D t\u00eb shfaqen n\u00eb der\u00ebn e A, duke e pyetur se pse ekipi A prishi nd\u00ebrtimin. Kjo e m\u00ebson A se nuk mund t\u00eb anashkalojn\u00eb list\u00ebn time m\u00eb sip\u00ebr. Ata duhet t\u00eb flasin p\u00ebr at\u00eb q\u00eb do t\u00eb b\u00ebjn\u00eb. A mund t\u00eb p\u00ebrparojn\u00eb B, C dhe D? \u00c7far\u00eb n\u00ebse B dhe C mund, por D \u00ebsht\u00eb ngusht\u00ebsisht i lidhur me efektin an\u00ebsor t\u00eb sjelljes s\u00eb algoritmit t\u00eb vjet\u00ebr?<\/p>\n<p><\/p>\n<p>Pastaj ne duhet t\u00eb flasim p\u00ebr at\u00eb se si do t\u00eb dalim nga kjo situat\u00eb:<\/p>\n<p><\/p>\n<ol>\n<li>Mb\u00ebshtetje p\u00ebr disa API t\u00eb brendsh\u00ebm, kurse algoritmi i vjet\u00ebr do t\u00eb sh\u00ebnohet si i vjetruar, derisa D t\u00eb mund ta ndaloj\u00eb p\u00ebrdorimin e tij.<\/li>\n<li>Mb\u00ebshtetje p\u00ebr disa versione l\u00ebshimesh, nj\u00eb me nd\u00ebrfaqen e vjet\u00ebr, nj\u00eb me t\u00eb re.<\/li>\n<li>Shkakto vones\u00ebn e l\u00ebshimit t\u00eb ndryshimeve A derisa B, C dhe D t\u00eb mund ta pranojn\u00eb at\u00eb ndoshta nj\u00ebkoh\u00ebsisht.<\/li>\n<\/ol>\n<p><\/p>\n<p>Le t\u00eb themi se zgjodh\u00ebm 1, disa API. N\u00eb k\u00ebt\u00eb rast, ne kemi dy copa kodi. T\u00eb vjetra dhe t\u00eb reja. Mjaft t\u00eb p\u00ebrshtatshme n\u00eb disa situata. Ne e kthejm\u00eb kodin e vjet\u00ebr prapa, e sh\u00ebnojm\u00eb si t\u00eb tejkaluar (deprecated) dhe bie dakord me ekipin D p\u00ebr nj\u00eb orar p\u00ebr heqjen e tij. N\u00eb thelb \u00ebsht\u00eb identike p\u00ebr poli dhe p\u00ebr monorepozitorin.<\/p>\n<p><\/p>\n<p>P\u00ebr botimin e disa versioneve na nevojitet nj\u00eb dege. Tani kemi dy komponent\u00eb \u2014 A1 dhe A2. Ekipet B dhe C p\u00ebrdorin A2, nd\u00ebrsa D p\u00ebrdor A1. Na nevojitet q\u00eb \u00e7do komponent t\u00eb jet\u00eb i gatsh\u00ebm p\u00ebr botim, sepse para se D t\u00eb mund t\u00eb avancoj\u00eb, mund t\u00eb k\u00ebrkohen p\u00ebrdit\u00ebsime sigurie dhe rregullime t\u00eb tjera gabimesh. N\u00eb poli-repozitor, ne mund ta fshehim k\u00ebt\u00eb n\u00eb nj\u00eb deg\u00eb me jet\u00ebgjat\u00ebsi, e cila ndjehet mir\u00eb. N\u00eb monorepozitor ne e krijojm\u00eb me forc\u00eb kodin n\u00eb nj\u00eb modul t\u00eb ri. Ekipit D atij do t'i duhet akoma t\u00eb b\u00ebj\u00eb ndryshime n\u00eb komponentin \"e vjet\u00ebr\". \u00c7do njeri mund t\u00eb shoh\u00eb koston q\u00eb po paguajm\u00eb k\u00ebtu \u2014 tani kemi dyfish m\u00eb shum\u00eb kod, dhe \u00e7do rregullim t\u00eb gabimeve q\u00eb aplikohet p\u00ebr A1 dhe A2 duhet t\u00eb aplikohet p\u00ebr t\u00eb dy. Me qasjen e p\u00ebrdorimit t\u00eb deg\u00ebve n\u00eb poli-repozitor, kjo fshihet pas cherry-pick. Ne e konsiderojm\u00eb kost\u00ebn si m\u00eb t\u00eb vog\u00ebl, sepse atje nuk ka p\u00ebrs\u00ebritje. Nga pik\u00ebpamja praktike, kostoja \u00ebsht\u00eb e nj\u00ebjt\u00eb: do t\u00eb krijoni, botoni dhe mbani dy baza kodi, kryesisht identike, deri sa t\u00eb mund t\u00eb hiqni nj\u00eb nga to. Diferenca \u00ebsht\u00eb se n\u00eb monorepozitor, kjo dhimbje \u00ebsht\u00eb e drejtp\u00ebrdrejt\u00eb dhe \u00ebsht\u00eb n\u00eb sy. <strong>Kjo \u00ebsht\u00eb edhe m\u00eb keq, dhe kjo \u00ebsht\u00eb mir\u00eb.<\/strong><\/p>\n<p><\/p>\n<p>M\u00eb n\u00eb fund, arrit\u00ebm n\u00eb pik\u00ebn e tret\u00eb. Vonesa n\u00eb l\u00ebshim. \u00cbsht\u00eb e mundur q\u00eb ndryshimet e B-s\u00eb do ta p\u00ebrmir\u00ebsojn\u00eb jet\u00ebn e ekipit A. E r\u00ebnd\u00ebsishme, por jo urgjente. A mund t\u00eb vonojm\u00eb thjesht? N\u00eb monorepozitorin, ne e nxisim k\u00ebt\u00eb p\u00ebr t\u00eb konsoliduar artefaktin. Sigurisht, ne e diskutojm\u00eb k\u00ebt\u00eb me ekipin D. Thjesht mbetni me versionin e vjet\u00ebr derisa t\u00eb p\u00ebrparoni! Kjo i hap rrug\u00eb nj\u00eb loje frikacaku. Ekipi A vazhdon t\u00eb punoj\u00eb mbi komponentin e tij, duke injoruar faktin q\u00eb ekipi D po p\u00ebrdor nj\u00eb version gjithnj\u00eb e m\u00eb t\u00eb vjetruar (\u00ebsht\u00eb problemi i ekipit D, ata jan\u00eb t\u00eb paq\u00ebndruesh\u00ebm). N\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, ekipi D flet keq p\u00ebr kujdesin e pandjesh\u00ebm t\u00eb ekipit A ndaj stabilitetit t\u00eb kodit, n\u00ebse flasin ndonj\u00ebher\u00eb p\u00ebr t\u00eb. Kalojn\u00eb muaj. N\u00eb fund, ekipi D vendos t\u00eb shqyrtoj\u00eb mund\u00ebsin\u00eb e p\u00ebrdit\u00ebsimit, por ndryshimet n\u00eb A jan\u00eb rritur vet\u00ebm. Ekipi A ia del me v\u00ebshtir\u00ebsi t\u00eb kujtoj\u00eb se kur dhe si e prish\u00ebn D. P\u00ebrdit\u00ebsimi b\u00ebhet m\u00eb i dhimbsh\u00ebm dhe do t\u00eb marr\u00eb m\u00eb shum\u00eb koh\u00eb. \u00c7ka e vendos at\u00eb m\u00eb posht\u00eb n\u00eb prioritetet. Deri n\u00eb at\u00eb dit\u00eb, kur na lind nj\u00eb problem sigurie n\u00eb A, q\u00eb na detyron t\u00eb b\u00ebjm\u00eb nj\u00eb deg\u00ebzim. Ekipi A duhet t\u00eb kthehet pas n\u00eb koh\u00eb, t\u00eb gjej\u00eb momentin kur D ishte i q\u00ebndruesh\u00ebm, t\u00eb rregulloj\u00eb problemin atje dhe ta b\u00ebj\u00eb at\u00eb gati p\u00ebr l\u00ebshim. <strong>Kjo \u00ebsht\u00eb nj\u00eb zgjedhje de facto q\u00eb e b\u00ebjn\u00eb njer\u00ebzit, dhe padyshim \u00ebsht\u00eb m\u00eb e keqja.<\/strong> Duket se \u00ebsht\u00eb mir\u00eb si p\u00ebr ekipin A ashtu edhe p\u00ebr D, derisa mund t\u00eb injorojm\u00eb nj\u00ebri-tjetrin.<\/p>\n<p><\/p>\n<p>N\u00eb monorepozitor, opsioni i tret\u00eb \u2013 n\u00eb t\u00eb v\u00ebrtet\u00eb nuk \u00ebsht\u00eb nj\u00eb mund\u00ebsi. Ju e keni t\u00eb detyrueshme t\u00eb merret me situat\u00ebn n\u00eb nj\u00eb nga dy m\u00ebnyrat. Duhet t\u00eb shihni kostot e t\u00eb pasurit dy dega l\u00ebshimi. T\u00eb m\u00ebsoni t\u00eb mbroni veten nga p\u00ebrdit\u00ebsimet q\u00eb shkat\u00ebrrojn\u00eb kompatibilitetin mbrapa. Por gj\u00ebja kryesore: <em>nuk mund t\u00eb shmangni nj\u00eb bised\u00eb t\u00eb v\u00ebshtir\u00eb.<\/em><\/p>\n<p><\/p>\n<p>Nga p\u00ebrvoja ime, kur ekipet b\u00ebhen t\u00eb m\u00ebdha, nuk ka m\u00eb mund\u00ebsi p\u00ebr t\u00eb mbajtur mend t\u00eb gjith\u00eb sistemin, dhe kjo \u00ebsht\u00eb pjesa m\u00eb e r\u00ebnd\u00ebsishme. Ju duhet t\u00eb p\u00ebrmir\u00ebsoni dukshm\u00ebrin\u00eb e mosmarr\u00ebveshjeve n\u00eb sistem. Ju duhet t\u00eb punoni aktivisht p\u00ebr t'i detyruar ekipet t\u00eb heqin syrin nga komponent\u00ebt e tyre dhe t\u00eb shohin pun\u00ebn e ekipet t\u00eb tjera dhe t\u00eb konsumator\u00ebve.<\/p>\n<p><\/p>\n<p>Po, ju mund t\u00eb krijoni mjete q\u00eb p\u00ebrpiqen t\u00eb zgjidhin problemin e poli-repozitor\u00ebve. Por p\u00ebrvoja ime me trajnimin e dor\u00ebzimit t\u00eb vazhduesh\u00ebm dhe automatizimin n\u00eb nd\u00ebrmarrje t\u00eb m\u00ebdha m\u00eb thot\u00eb se: sjellja e paracaktuar pa p\u00ebrdorimin e mjeteve shtes\u00eb \u00ebsht\u00eb ajo sjellje q\u00eb prisni t\u00eb shihni. <strong>Sjellja e poli-repozitor\u00ebve n\u00eb parazgjedhje \u00ebsht\u00eb izolimi, kjo \u00ebsht\u00eb e gjith\u00eb kuptimi. Sjellja e monorepozitor\u00ebve n\u00eb parazgjedhje \u00ebsht\u00eb p\u00ebrgjegj\u00ebsia e p\u00ebrbashk\u00ebt dhe transparenca, kjo \u00ebsht\u00eb e gjith\u00eb kuptimi.<\/strong> N\u00eb t\u00eb dy rastet, un\u00eb do t\u00eb krijoj nj\u00eb mjet q\u00eb do t\u00eb leht\u00ebsoj\u00eb k\u00ebndv\u00ebshtrimet e ashpra. Si lider, do t\u00eb zgjedh gjithmon\u00eb monorepozitorin, sepse mjetet duhet t\u00eb forcojn\u00eb kultur\u00ebn q\u00eb un\u00eb dua, dhe kultura rrjedh nga vendimet e vogla dhe puna e p\u00ebrditshme e ekipit.<\/p>\n<p class=\"for_users_only_msg\">Vet\u00ebm p\u00ebrdoruesit e regjistruar mund t\u00eb marrin pjes\u00eb n\u00eb anket\u00eb. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Hyni<\/a><\/noindex>, ju lutem.<\/p>\n<h2 class=\"default-block__polling-title\">Kush jan\u00eb fanatik\u00ebt m\u00eb t\u00eb m\u00ebdhenj? Mb\u00ebshtet\u00ebsit:<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Monorepozita<\/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>                    Anketa e gabuar \/ t\u00eb dyja<\/p>\n<\/li>\n<\/ul>\n<p>    33 p\u00ebrdorues kan\u00eb votuar. 13 p\u00ebrdorues kan\u00eb abstenuar.<br \/>\n<br \/>Burimi: <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 - 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\/sq\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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\udd47Monorepozitor\u00ebt: ju lutem, duhet | ProHoster","description":"P\u00ebrkthimi i artikullit \u00ebsht\u00eb p\u00ebrgatitur p\u00ebr student\u00ebt.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/34744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=34744"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/34744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/26181"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=34744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=34744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=34744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}