Kada radiš na zajedničkim kodnim bazama, često se postavlja pitanje kako organizovati repozitorijume – sve u jedan monorepo ili više manjih repozitorijuma? Ova dilema nosi svoje prednosti i mane, a projekat Kubernetes je često bio suočen sa ovim problemom. Dakle, da li je bolje sve staviti u jedan repozitorijum ili ih razdvojiti u više manjih?
Monorepos, gde je ceo kod u jednom repozitorijumu, može olakšati verzionisanje i zavisnosti, ali kada mnogo ljudi radi na jednom mestu, workflow postaje sporiji. To se dešava jer je potrebno da zahtevi za promene (pull requestovi) prođu kroz više nivoa odobravanja, što povećava broj notifikacija i vreme čekanja. Build-ovi traju duže, testovi postaju složeniji, a konflikti u kodu su češći. Kubernetes je brzo došao do limita brzine promene u monorepos sistemu sa samo 20 saradnika i preko 40 promena dnevno.
S druge strane, git je popularan alat za verzionisanje koda i koristi ga većina open-source projekata. Korišćenjem platformi kao što su GitHub, GitLab ili Bitbucket, proces rada na zajedničkim repozitorijumima postaje lakši. Promene se šalju putem pull requestova, a zatim ih drugi članovi tima pregledaju, što je najbolja praksa u industriji. Automatizacija testova putem CI sistema takođe pomaže da kod bude stabilan.
Ipak, rad sa monoreposom nije bez izazova. Google koristi monorepo sistem, ali je morao da razvije niz specifičnih alata kako bi sve funkcionisalo na tako velikoj skali. Ovo uključuje napredne sisteme za verzionisanje, build farmove i kontrolu zavisnosti, što nije uobičajeno u git ekosistemu.
Rad sa više manjih repozitorijuma može biti efikasniji za veće projekte, ali i to dolazi sa svojim izazovima. Git nudi alate kao što su submodules i subtrees za kombinovanje repozitorijuma, ali Kubernetes je razvio i sopstvene alate poput Prow, koji automatizuje procese na GitHubu. Takođe, problem sa API-jevima različitih platformi kao što su GitHub, GitLab i Bitbucket otežava standardizaciju procesa.
Bez obzira na to da li radiš sa monoreposom ili više manjih repozitorijuma, važno je koristiti prave alate koji će ti pomoći da efikasno upravljaš razvojem. Za manje timove pojedinačni repozitorijumi mogu biti dobra opcija, ali za veće projekte neophodno je koristiti naprednije alate za upravljanje.