{"id":41027,"date":"2021-10-07T10:53:27","date_gmt":"2021-10-07T08:53:27","guid":{"rendered":"https:\/\/kinsta.com\/?p=100242"},"modified":"2023-09-21T09:52:21","modified_gmt":"2023-09-21T09:52:21","slug":"monorepo-vs-multi-repo","status":"publish","type":"post","link":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/","title":{"rendered":"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier"},"content":{"rendered":"<p>Det finns tv\u00e5 huvudstrategier f\u00f6r <a href=\"https:\/\/kinsta.com\/se\/priser\/\">att lagra<\/a> och hantera kod genom Git: monorepo vs multi-repo. B\u00e5da tillv\u00e4gag\u00e5ngss\u00e4tten har sina f\u00f6rdelar och nackdelar.<\/p>\n<p>Vi kan anv\u00e4nda b\u00e5da tillv\u00e4gag\u00e5ngss\u00e4tt f\u00f6r vilken kodbas som helst p\u00e5 vilket spr\u00e5k som helst. Du kan anv\u00e4nda b\u00e5de dessa strategier f\u00f6r projekt som inneh\u00e5ller bara n\u00e5gra <a href=\"https:\/\/kinsta.com\/se\/blog\/javascript-biblioteken\/\">bibliotek<\/a> till tusentals. \u00c4ven om det handlar om n\u00e5gra teammedlemmar eller hundratals, eller om du vill hosta privat eller \u00f6ppen k\u00e4llkod, kan du fortfarande v\u00e4lja monorepo eller multi-repo baserat p\u00e5 olika faktorer.<\/p>\n<p>Vilka \u00e4r f\u00f6rdelarna och nackdelarna med respektive tillv\u00e4gag\u00e5ngss\u00e4tt? N\u00e4r borde vi anv\u00e4nda det ena eller det andra? L\u00e5t oss ta reda p\u00e5 det!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Vad \u00e4r repo f\u00f6r n\u00e5got?<\/h2>\n<p>Ett repo (f\u00f6rkortning f\u00f6r repository, som betyder f\u00f6rvar, f\u00f6rr\u00e5d, eller arkiv) \u00e4r en lagringsplats f\u00f6r alla \u00e4ndringar och filer fr\u00e5n ett projekt, vilket g\u00f6r det m\u00f6jligt f\u00f6r utvecklare att &#8221;versionskontrollera&#8221; projektets tillg\u00e5ngar under hela utvecklingsstadiet.<\/p>\n<p>Vi brukar h\u00e4nvisa till <a href=\"https:\/\/kinsta.com\/docs\/wordpress-hosting\/site-management\/git\/\">Git<\/a>-f\u00f6rr\u00e5d (som tillhandah\u00e5lls av <a href=\"https:\/\/kinsta.com\/se\/blog\/git-vs-github\/\">GitHub<\/a>, <a href=\"https:\/\/kinsta.com\/se\/blog\/gitlab-vs-github\/\">GitLab<\/a>, eller <a href=\"https:\/\/kinsta.com\/se\/blog\/bitbucket-vs-github\/\">Bitbucket<\/a>), men konceptet g\u00e4ller \u00e4ven f\u00f6r andra versionskontrollsystem (t.ex. Mercurial).<\/p>\n\n<h2>Vad \u00e4r monorepo?<\/h2>\n<p>Monorepo-metoden anv\u00e4nder ett enda <a href=\"https:\/\/kinsta.com\/se\/blog\/bitbucket-vs-github\/\">f\u00f6rr\u00e5d<\/a> f\u00f6r att hosta all kod f\u00f6r flera bibliotek eller tj\u00e4nster som utg\u00f6r ett f\u00f6retags projekt. I allra h\u00f6gsta grad \u00e4r hela kodbasen fr\u00e5n ett f\u00f6retag \u2013 som r\u00f6r olika projekt och kodas p\u00e5 olika spr\u00e5k \u2013 f\u00f6rvarade i ett enda f\u00f6rr\u00e5d.<\/p>\n<h2>F\u00f6rdelar med monorepo<\/h2>\n<p>Att f\u00f6rvara hela kodbasen i ett enda f\u00f6rr\u00e5d ger f\u00f6ljande f\u00f6rdelar.<\/p>\n<h3>S\u00e4nker intr\u00e4destr\u00f6skeln<\/h3>\n<p>N\u00e4r nya anst\u00e4llda b\u00f6rjar arbeta f\u00f6r ett f\u00f6retag m\u00e5ste de ladda ner koden och installera de n\u00f6dv\u00e4ndiga verktygen f\u00f6r att b\u00f6rja arbeta med sina uppgifter. Antag att projektet \u00e4r utspritt \u00f6ver m\u00e5nga f\u00f6rr\u00e5d, var och ett med egna installationsanvisningar och verktyg. I s\u00e5 fall kommer den ursprungliga installationen att vara komplex, och ofta kommer dokumentationen inte vara fullst\u00e4ndig, s\u00e5 att dessa nya teammedlemmar beh\u00f6ver ta hj\u00e4lp av kollegor.<\/p>\n<p>Ett monorepo f\u00f6renklar saker. Eftersom det finns en enda plats som inneh\u00e5ller all kod och <a href=\"https:\/\/kinsta.com\/docs\/devkinsta\/\">dokumentation<\/a> kan du effektivisera den ursprungliga introduktionen.<\/p>\n<h3>Centralt bel\u00e4gen kodhantering<\/h3>\n<p>Att ha ett enda f\u00f6rr\u00e5d g\u00f6r all kod synlig f\u00f6r alla utvecklare. Detta f\u00f6renklar kodhantering eftersom vi kan anv\u00e4nda en enda problemtracker f\u00f6r att titta p\u00e5 alla problem under programmets livscykel.<\/p>\n<p>Dessa egenskaper \u00e4r till exempel v\u00e4rdefulla n\u00e4r ett problem str\u00e4cker sig \u00f6ver tv\u00e5 (eller flera) underbibliotek d\u00e4r felet finns p\u00e5 det beroende biblioteket. Med flera f\u00f6rr\u00e5d kan det vara utmanande att <a href=\"https:\/\/kinsta.com\/se\/blog\/inspektera-element\/\">hitta den bit kod<\/a> d\u00e4r problemet intr\u00e4ffar.<\/p>\n<p>Ut\u00f6ver detta skulle vi beh\u00f6va ta reda p\u00e5 vilket f\u00f6rr\u00e5d som borde anv\u00e4ndas f\u00f6r att skapa problemet och sedan bjuda in och korstagga medlemmar i andra team f\u00f6r att hj\u00e4lpa till att l\u00f6sa problemet.<\/p>\n<p>Med ett monorepo kan det bli mycket enklare att b\u00e5de lokalisera kodproblem och samarbeta med fels\u00f6kningen.<\/p>\n<h3>Enkel applikationsomfattande refaktorering<\/h3>\n<p>N\u00e4r du skapar en applikationsomfattande refaktorering av koden kommer flera bibliotek att p\u00e5verkas. Om du f\u00f6rvarar dem p\u00e5 flera f\u00f6rr\u00e5d kan hantering av alla olika pull-f\u00f6rfr\u00e5gningar f\u00f6r att h\u00e5lla dem synkroniserade med varandra snabbt bli en utmaning.<\/p>\n<p>Ett monorepo g\u00f6r det enkelt att utf\u00f6ra alla \u00e4ndringar av all kod f\u00f6r alla bibliotek och skicka in dem under en enda pull-f\u00f6rfr\u00e5gan.<\/p>\n<h3>Sv\u00e5rare att f\u00f6rst\u00f6ra intilliggande funktionalitet<\/h3>\n<p>Med monorepo kan vi k\u00f6ra alla tester f\u00f6r alla bibliotek n\u00e4r ett enda bibliotek \u00e4ndras. Som ett resultat har en f\u00f6r\u00e4ndring i vissa bibliotek en mindre negativ effekt p\u00e5 andra bibliotek.<\/p>\n<h3>Teamen delar utvecklingskultur<\/h3>\n<p>\u00c4ven om det inte \u00e4r om\u00f6jligt blir det med en monorepo-strategi utmanande att inspirera unika subkulturer bland olika team. Eftersom de kommer att dela samma f\u00f6rr\u00e5d kommer de troligen att dela samma <a href=\"https:\/\/kinsta.com\/se\/blog\/basta-programmeringsspraket-att-lara-sig\/\">programmerings-<\/a> och hanterings-metoder och anv\u00e4nda samma <a href=\"https:\/\/kinsta.com\/blog\/apm-tools\/\">programutvecklingsverktyg<\/a>.<\/p>\n<h2>Problem med monorepo-strategin<\/h2>\n<p>Att anv\u00e4nda ett enda f\u00f6rr\u00e5d f\u00f6r all v\u00e5r kod har flera nackdelar.<\/p>\n<h3>L\u00e5ngsammare utvecklingscykler<\/h3>\n<p>N\u00e4r koden f\u00f6r ett bibliotek inneh\u00e5ller brytande \u00e4ndringar som f\u00e5r testerna f\u00f6r beroende bibliotek att misslyckas m\u00e5ste koden ocks\u00e5 fixas innan \u00e4ndringarna sl\u00e5s samman.<\/p>\n<p>Om dessa bibliotek \u00e4r beroende av andra team, som \u00e4r upptagna med att arbeta med en annan uppgift och inte kan (eller vill) anpassa sin kod f\u00f6r att undvika att bryta f\u00f6r\u00e4ndringar och f\u00e5 testen godk\u00e4nda kan utvecklingen av den nya funktionen avstanna.<\/p>\n<p>Dessutom kan projektet b\u00f6rja avancera endast enligt f\u00f6retagets l\u00e5ngsammaste teams hastighet. Detta kan frustrera medlemmarna i de snabbaste teamen och f\u00e5 dem att vilja l\u00e4mna f\u00f6retaget.<\/p>\n<p>Dessutom m\u00e5ste ett bibliotek utf\u00f6ra testerna f\u00f6r alla andra bibliotek ocks\u00e5. Ju <a href=\"https:\/\/kinsta.com\/se\/blog\/hastighetstest-for-en-webbplats\/\">fler tester som m\u00e5ste g\u00f6ras<\/a>, desto mer tid tar det, vilket saktar ner hur snabbt vi kan iterera v\u00e5r kod.<\/p>\n<h3>Kr\u00e4ver nedladdning av hela kodbasen<\/h3>\n<p>N\u00e4r ett monorepo inneh\u00e5ller all kod f\u00f6r ett f\u00f6retag kan det vara enormt, med flera gigabyte av data. F\u00f6r att bidra till ett bibliotek som lagras d\u00e4r skulle man beh\u00f6va ladda ner hela f\u00f6rr\u00e5det.<\/p>\n<p>Att hantera en stor kodbas inneb\u00e4r d\u00e5lig anv\u00e4ndning av utrymme p\u00e5 v\u00e5ra h\u00e5rddiskar och l\u00e5ngsammare interaktioner. Till exempel vardagliga handlingar som exekvering av <code>git status<\/code> eller s\u00f6ka i kodbasen med en regex kan ta m\u00e5nga sekunder eller till och med minuter l\u00e4ngre \u00e4n de skulle med multi-repo.<\/p>\n<h3>Omodifierade bibliotek kan ha nyligen gjorda versioner.<\/h3>\n<p>N\u00e4r vi <a href=\"https:\/\/kinsta.com\/blog\/wordpress-tags\/\">taggar<\/a> monorepot kommer all kod i det f\u00e5 den nya taggen. Om den h\u00e4r \u00e5tg\u00e4rden utl\u00f6ser en ny utg\u00e5va kommer alla bibliotek i f\u00f6rr\u00e5det att sl\u00e4ppas som nya med versionsnumret fr\u00e5n taggen, \u00e4ven om m\u00e5nga av dessa bibliotek kanske inte har haft n\u00e5gra \u00e4ndringar.<\/p>\n<h3>Det \u00e4r sv\u00e5rare att forka<\/h3>\n<p>Projekt med \u00f6ppen k\u00e4llkod m\u00e5ste g\u00f6ra det s\u00e5 enkelt som m\u00f6jligt f\u00f6r bidragsgivarna att engagera sig. Med flera f\u00f6rr\u00e5d kan bidragsgivare g\u00e5 direkt till det specifika f\u00f6rr\u00e5det f\u00f6r det projekt de vill bidra till. Med ett monorepo som lagrar olika projekt m\u00e5ste dock bidragsgivare f\u00f6rst navigera till r\u00e4tt projekt och kommer beh\u00f6va f\u00f6rst\u00e5 hur deras bidrag kan p\u00e5verka alla andra projekt.<\/p>\n<h2>Vad \u00e4r multi-repo?<\/h2>\n<p>Multi-repo-metoden anv\u00e4nder flera f\u00f6rr\u00e5d f\u00f6r att lagra flera bibliotek eller tj\u00e4nster av ett projekt som utvecklats av ett f\u00f6retag. Som mest kan det lagra varje liten upps\u00e4ttning \u00e5teranv\u00e4ndbar kod eller frist\u00e5ende funktionalitet (t.ex. en mikrotj\u00e4nst) under ett eget f\u00f6rr\u00e5d.<\/p>\n<h2>F\u00f6rdelar med multi-repo<\/h2>\n<p>Att f\u00f6rvara varje bibliotek oberoende av alla andra ger en m\u00e4ngd f\u00f6rdelar.<\/p>\n<h3>Oberoende biblioteksversionshantering<\/h3>\n<p>N\u00e4r du taggar ett f\u00f6rr\u00e5d tilldelas hela kodbasen den &#8221;nya&#8221; taggen. Eftersom endast koden f\u00f6r ett specifikt bibliotek finns i f\u00f6rr\u00e5det kan biblioteket m\u00e4rkas och versioneras oberoende av alla andra bibliotek som lagras n\u00e5gon annanstans.<\/p>\n<p>Att ha en oberoende version f\u00f6r varje bibliotek hj\u00e4lper till att definiera beroendetr\u00e4det f\u00f6r programmet, s\u00e5 att vi kan konfigurera vilken version av varje bibliotek som ska anv\u00e4ndas.<\/p>\n<h3>Oberoende tj\u00e4nstutg\u00e5vor<\/h3>\n<p>Eftersom f\u00f6rr\u00e5det endast inneh\u00e5ller koden f\u00f6r en specifik tj\u00e4nst och inget annat kan det ha sin egen distributionscykel, oberoende av eventuella framsteg som gjorts p\u00e5 applikationerna som har tillg\u00e5ng till tj\u00e4nsten.<\/p>\n<p>Tj\u00e4nsten kan anv\u00e4nda en snabb utgivningscykel s\u00e5som kontinuerlig leverans (d\u00e4r ny kod distribueras efter att den f\u00e5tt godk\u00e4nt i alla tester). Vissa bibliotek som anv\u00e4nder tj\u00e4nsten kan anv\u00e4nda en l\u00e5ngsammare cykel, till exempel de som bara producerar en ny utg\u00e5va en g\u00e5ng i veckan.<\/p>\n<h3>Hj\u00e4lper till att definiera \u00e5tkomstkontroll \u00f6ver hela organisationen<\/h3>\n<p>Endast de teammedlemmar som arbetar med att utveckla ett bibliotek m\u00e5ste l\u00e4ggas till i motsvarande f\u00f6rr\u00e5d och ladda ner koden. Som ett resultat finns det en implicit \u00e5tkomstkontrollstrategi f\u00f6r varje lager i <a href=\"https:\/\/kinsta.com\/se\/blog\/applikationsprestandaovervakning\/\">applikationen<\/a>. De som \u00e4r involverade i biblioteket kommer att beviljas redigeringsr\u00e4ttigheter, och ingen annan kan f\u00e5 tillg\u00e5ng till f\u00f6rr\u00e5det. Eller s\u00e5 kan de f\u00e5 l\u00e4s- men inte redigerings-r\u00e4ttigheter.<\/p>\n<h3>Hj\u00e4lper team arbeta autonomt<\/h3>\n<p>Teammedlemmar kan designa bibliotekets arkitektur och implementera dess kod isolerat fr\u00e5n alla andra team. De kan fatta beslut utifr\u00e5n vad biblioteket g\u00f6r i allm\u00e4nhet utan att p\u00e5verkas av specifika krav fr\u00e5n n\u00e5got externt team eller program.<\/p>\n<h2>Problem med multi-repo-strategin<\/h2>\n<p>Att anv\u00e4nda flera f\u00f6rr\u00e5d kan ge upphov till flera problem.<\/p>\n<h3>Bibliotek m\u00e5ste st\u00e4ndigt f\u00f6rnyas<\/h3>\n<p>N\u00e4r en ny version av ett bibliotek som inneh\u00e5ller brytande \u00e4ndringar sl\u00e4pps m\u00e5ste alla bibliotek som \u00e4r beroende av detta bibliotek anpassas f\u00f6r att anv\u00e4nda den senaste versionen. Om bibliotekets utgivningscykel \u00e4r snabbare \u00e4n dess beroende bibliotek kan de snabbt bli osynkroniserade med varandra.<\/p>\n<p>Team m\u00e5ste st\u00e4ndigt komma i kapp f\u00f6r att anv\u00e4nda de senaste utg\u00e5vorna fr\u00e5n andra team. Med tanke p\u00e5 att olika team har olika prioriteringar kan det ibland vara sv\u00e5rt att uppn\u00e5.<\/p>\n<p>F\u00f6ljaktligen kan ett team som inte kan komma i kapp h\u00e5lla sig till den f\u00f6r\u00e5ldrade versionen av det beroende biblioteket. Detta kommer f\u00e5 konsekvenser f\u00f6r applikationen (n\u00e4r det g\u00e4ller s\u00e4kerhet, hastighet och andra faktorer), och klyftan i utveckling \u00f6ver de olika biblioteken blir bara bredare.<\/p>\n<h3>Kan fragmentera team<\/h3>\n<p>N\u00e4r olika team inte beh\u00f6ver interagera med varandra kan de arbeta helt avskilt p\u00e5 flera s\u00e4tt. P\u00e5 l\u00e5ng sikt kan detta leda till att teamen producerar sina egna subkulturer inom f\u00f6retaget, till exempel olika metoder f\u00f6r programmering eller hantering, eller anv\u00e4nda olika upps\u00e4ttningar utvecklingsverktyg.<\/p>\n<p>Om en teammedlem s\u00e5 sm\u00e5ningom beh\u00f6ver arbeta i ett annat team kan de drabbas av en kulturchock av att beh\u00f6va l\u00e4ra sig ett nytt s\u00e4tt att g\u00f6ra sitt jobb.<\/p>\n<h2>Monorepo vs multi-repo: prim\u00e4ra skillnader<\/h2>\n<p>B\u00e5da strategierna handlar i slut\u00e4ndan om samma sak: att hantera kodbasen. D\u00e4rmed m\u00e5ste de b\u00e5da l\u00f6sa samma utmaningar, inklusive utgivingshantering, fr\u00e4mja <a href=\"https:\/\/kinsta.com\/se\/blog\/microsoft-teams-vs-slack\/\">samarbete mellan teammedlemmar<\/a>, l\u00f6sa problem, testa koden, och mycket mer.<\/p>\n<p>Deras huvudsakliga skillnad g\u00e4ller deras timing f\u00f6r teammedlemmar att fatta beslut: antingen direkt med monorepo eller allteftersom med multi-repo.<\/p>\n<p>L\u00e5t oss analysera detta lite mer i detalj.<\/p>\n<p>Eftersom alla bibliotek \u00e4r oberoende versionerade i multi-repo kan ett team som sl\u00e4pper ett bibliotek med brytande \u00e4ndringar g\u00f6ra det s\u00e4kert genom att tilldela ett nytt versionsnummer till den senaste versionen. Andra grupper kan l\u00e5ta sina beroende bibliotek h\u00e5lla sig till den gamla versionen och byta till den nya n\u00e4r deras egen kod anpassats.<\/p>\n<p>Detta tillv\u00e4gag\u00e5ngss\u00e4tt l\u00e4mnar beslutet om n\u00e4r man ska anpassa alla andra bibliotek upp till varje enskilt team, som kan g\u00f6ra det n\u00e4r som helst. Om de g\u00f6r det f\u00f6r sent och nya biblioteksversioner sl\u00e4pps blir det allt sv\u00e5rare att st\u00e4nga klyftan mellan biblioteken.<\/p>\n<p>F\u00f6ljaktligen, medan ett team kan iterera snabbt och ofta med sin egen kod kan andra team visa sig of\u00f6rm\u00f6gna att komma i kapp, vilket i slut\u00e4ndan producerar bibliotek som avviker fr\u00e5n varandra.<\/p>\n<p>\u00c5 andra sidan kan vi i en monorepo-milj\u00f6 inte sl\u00e4ppa en ny version av ett bibliotek som bryter n\u00e5got annat bibliotek eftersom deras tester kommer att misslyckas. I det h\u00e4r fallet m\u00e5ste det f\u00f6rsta teamet kommunicera med det andra teamet f\u00f6r att inf\u00f6rliva \u00e4ndringarna.<\/p>\n<p>Detta tillv\u00e4gag\u00e5ngss\u00e4tt tvingar team att anpassa <a href=\"https:\/\/kinsta.com\/se\/blog\/javascript-biblioteken\/\">alla bibliotek<\/a> tillsammans n\u00e4r en f\u00f6r\u00e4ndring f\u00f6r ett enda bibliotek m\u00e5ste ske. Alla team tvingas prata med varandra och n\u00e5 en l\u00f6sning tillsammans.<\/p>\n<p>Som ett resultat kommer det f\u00f6rsta teamet inte att kunna iterera s\u00e5 fort de vill, men koden \u00f6ver olika bibliotek kommer inte att b\u00f6rja avvika fr\u00e5n varandra.<\/p>\n<p>Sammanfattningsvis kan multi-repo-strategin bidra till att skapa en kultur av &#8221;g\u00e5 snabbt fram och bryt saker och ting&#8221; bland team, d\u00e4r oberoende team kan producera ny kod med sin egen hastighet. Monorepo-strategin gynnar \u00e5 andra sidan en kultur av medvetenhet och omt\u00e4nksamhet, d\u00e4r team inte kommer hamna efter f\u00f6r att beh\u00f6va hantera ett problem helt sj\u00e4lva.<\/p>\n<h2>Hybrid poly-as-mono-strategi<\/h2>\n<p>Om vi inte kan besluta om att anv\u00e4nda antingen multi-repo eller monorepo-strategin, finns det ocks\u00e5 mellanliggande strategier: att anv\u00e4nda flera f\u00f6rr\u00e5d och anv\u00e4nda n\u00e5gra verktyg f\u00f6r att h\u00e5lla dem synkroniserade, vilket f\u00e5r dem att lika ett monorepo men med mer flexibilitet.<\/p>\n<p><a href=\"https:\/\/github.com\/mateodelnorte\/meta\">Meta<\/a> \u00e4r ett s\u00e5dant verktyg. Det organiserar flera f\u00f6rr\u00e5d i underkataloger och tillhandah\u00e5ller ett <a href=\"https:\/\/kinsta.com\/se\/blog\/hur-man-anvander-ssh\/\">kommandoradsgr\u00e4nssnitt<\/a> som exekverar samma kommando p\u00e5 dem alla samtidigt.<\/p>\n<p>Ett metaf\u00f6rr\u00e5d inneh\u00e5ller information om vilka f\u00f6rr\u00e5d som ett projekt best\u00e5r av. Kloning av detta f\u00f6rr\u00e5d via meta kommer sedan rekursivt klona alla n\u00f6dv\u00e4ndiga f\u00f6rr\u00e5d, vilket g\u00f6r det l\u00e4ttare f\u00f6r nya teammedlemmar att b\u00f6rja arbeta med sina projekt omedelbart.<\/p>\n<p>F\u00f6r att klona ett metaf\u00f6rr\u00e5d och alla dess definierade f\u00f6rr\u00e5dd, m\u00e5ste vi exekvera f\u00f6ljande:<\/p>\n<pre><code class=\"language-bash\">meta git clone [meta repo url]\n<\/code><\/pre>\n<p>Meta kommer att exekvera en <code>git clone<\/code> f\u00f6r varje f\u00f6rr\u00e5d och placera den i en undermapp:<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/07\/meta-cloning.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/07\/meta-cloning-1024x755.png\" alt=\"Kloning av ett metaprojekt\" width=\"1024\" height=\"755\"><\/a><figcaption class=\"wp-caption-text\">Kloning av ett metaprojekt. (Bildk\u00e4lla: <a href=\"https:\/\/github.com\/mateodelnorte\/meta\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/mateodelnorte\/meta<\/a>)<\/figcaption><\/figure>\n<p>D\u00e4refter kommer kommandot <code>meta exec<\/code> att exekvera kommandot p\u00e5 varje undermapp. Till exempel anv\u00e4nds <code>git checkout master<\/code> p\u00e5 varje f\u00f6rr\u00e5d s\u00e5 h\u00e4r:<\/p>\n<pre><code class=\"language-bash\">meta exec \"git checkout master\"\n<\/code><\/pre>\n<h2>Hybrid mono-as-poly-strategi<\/h2>\n<p>Ett annat tillv\u00e4gag\u00e5ngss\u00e4tt \u00e4r att hantera koden via ett monorepo f\u00f6r utveckling, men kopiera varje biblioteks kod till sitt oberoende f\u00f6rr\u00e5d f\u00f6r distribution.<\/p>\n<p>Denna strategi \u00e4r utbredd inom PHP-ekosystemen eftersom <a href=\"https:\/\/packagist.org\/\">Packagist<\/a> (det huvudsakliga <a href=\"https:\/\/getcomposer.org\/\">Composer<\/a>-f\u00f6rr\u00e5det) kr\u00e4ver en offentlig <a href=\"https:\/\/kinsta.com\/blog\/what-is-a-url\/\">f\u00f6rr\u00e5dsadress<\/a> f\u00f6r att publicera ett paket, och det \u00e4r inte m\u00f6jligt att ange att paketet finns i en underkatalog till f\u00f6rr\u00e5det.<\/p>\n<p>Med tanke p\u00e5 Packagists begr\u00e4nsning kan <a href=\"https:\/\/graphql-api.com\/blog\/extending-the-monorepo-builder\/\">PHP-projekt fortfarande anv\u00e4nda monorepo f\u00f6r utveckling<\/a>, men m\u00e5ste anv\u00e4nda multi-repo-metoden f\u00f6r distribution.<\/p>\n<p>F\u00f6r att uppn\u00e5 denna konvertering kan vi <a href=\"https:\/\/stackoverflow.com\/questions\/359424\/detach-move-subdirectory-into-separate-git-repository\/17864475#17864475\">k\u00f6ra ett skript med <code>git subtree split<\/code><\/a> eller anv\u00e4nda ett av de tillg\u00e4ngliga verktygen som utf\u00f6r samma logik:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/splitsh\/lite\" target=\"_blank\" rel=\"noopener noreferrer\">Git Subtree Splitter<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dflydev\/git-subsplit\" target=\"_blank\" rel=\"noopener noreferrer\">Git Subsplit<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/symplify\/monorepo-split-github-action\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Action for Monorepo Split<\/a><\/li>\n<\/ul>\n<h2>Vem anv\u00e4nder monorepo vs multi-repo<\/h2>\n<p>Flera stora teknikf\u00f6retag anv\u00e4nder monorepo-metoden, medan andra har best\u00e4mt sig f\u00f6r att anv\u00e4nda multi-repo-metoden.<\/p>\n<p><a href=\"https:\/\/cacm.acm.org\/magazines\/2016\/7\/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository\/fulltext\">Google<\/a>, <a href=\"https:\/\/www.facebook.com\/atscaleevents\/videos\/systems-scale-2019-monorepos-moving-fast-in-a-huge-repository\/457153524992062\/\">Facebook<\/a>, <a href=\"https:\/\/blog.twitter.com\/engineering\/en_us\/a\/2016\/the-release-of-pants-10\">Twitter<\/a>, och <a href=\"https:\/\/www.youtube.com\/watch?v=lV8-1S28ycM\">Uber<\/a> har alla offentligt sagt att de anv\u00e4nder monorepo. Microsoft <a href=\"https:\/\/devblogs.microsoft.com\/bharry\/the-largest-git-repo-on-the-planet\/\">driver det st\u00f6rsta Git monorepot p\u00e5 planeten<\/a> f\u00f6r att lagra k\u00e4llkoden f\u00f6r Windows operativsystem.<\/p>\n<p>\u00c5 andra sidan \u00e4r <a href=\"https:\/\/netflixtechblog.com\/towards-true-continuous-integration-distributed-repositories-and-dependencies-2a2e3108c051\">Netflix<\/a>, <a href=\"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3328433.3328435\">Amazon och Lyft<\/a> k\u00e4nda f\u00f6retag som anv\u00e4nder multi-repo-strategin.<\/p>\n<p>N\u00e4r det g\u00e4ller hybrid poly-as-mono uppdaterar <a href=\"https:\/\/source.android.com\/setup\/create\/coding-tasks\">Android<\/a> flera f\u00f6rr\u00e5d, som hanteras som ett monorepo.<\/p>\n<p>N\u00e4r det g\u00e4ller hybrid mono-as-poly har <a href=\"https:\/\/kinsta.com\/se\/blog\/php-ramverken\/#symfony\">Symfony<\/a> koden f\u00f6r alla sina komponenter i ett monorepo. De delar upp det i oberoende f\u00f6rr\u00e5d f\u00f6r distribution (t.ex. <a href=\"https:\/\/github.com\/symfony\/dependency-injection\"><code>symfony\/dependency-injection<\/code><\/a> och <code><a href=\"https:\/\/github.com\/symfony\/event-dispatcher\">symfony\/event-dispatcher<\/a><\/code>.)<\/p>\n<h2>Exempel p\u00e5 monorepo och multi-repo<\/h2>\n<p><a href=\"https:\/\/github.com\/WordPress\/WordPress\">WordPress-kontot p\u00e5 GitHub<\/a> har exempel p\u00e5 b\u00e5de monorepo och multi-repo-strategierna.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-gutenberg-redigeraren\/\">Gutenberg<\/a>, WordPress blockredigerare, best\u00e5r av flera dussin <a href=\"https:\/\/kinsta.com\/blog\/what-is-javascript\/\">JavaScript<\/a>-paket. Dessa paket lagras alla p\u00e5 <a href=\"https:\/\/github.com\/WordPress\/gutenberg\"><code>WordPress\/gutenberg<\/code> monorepo<\/a> och hanteras genom <a href=\"https:\/\/github.com\/lerna\/lerna\">Lerna<\/a> f\u00f6r att publicera dem i <a href=\"https:\/\/kinsta.com\/se\/blog\/vad-node-js\/#what-is-npm\">npm<\/a>-f\u00f6rr\u00e5det.<\/p>\n<p><a href=\"https:\/\/wordpress.org\/news\/2021\/05\/welcome-to-openverse\/\">Openverse<\/a>, s\u00f6kmotorn f\u00f6r \u00f6ppet licensierade medier, <a href=\"https:\/\/github.com\/WordPress\/openverse\/blob\/918b7cf1b6323291ab16c1ad5a27f3733709ec17\/README.md#openverse\">har sina huvuddelar<\/a> i oberoende f\u00f6rr\u00e5d: <a href=\"https:\/\/github.com\/wordpress\/openverse-frontend\">Frontend<\/a>, <a href=\"https:\/\/github.com\/wordpress\/openverse-catalog\">Catalog<\/a>, och <a href=\"https:\/\/github.com\/wordpress\/openverse-api\">API<\/a>.<\/p>\n<h2>Monorepo vs multi-repo: hur v\u00e4ljer man?<\/h2>\n<p>Som med m\u00e5nga utvecklingsproblem finns det inget f\u00f6rdefinierat svar p\u00e5 vilket tillv\u00e4gag\u00e5ngss\u00e4tt du borde anv\u00e4nda. Olika f\u00f6retag och projekt kommer att gynnas av en specifik strategi baserat p\u00e5 deras unika f\u00f6rh\u00e5llanden, s\u00e5som:<\/p>\n<ul>\n<li>Hur stor \u00e4r kodbasen? Inneh\u00e5ller den m\u00e5nga gigabyte data?<\/li>\n<li>Hur m\u00e5nga kommer att arbeta p\u00e5 kodbasen? \u00c4r det runt 10, 100 eller 1000?<\/li>\n<li>Hur m\u00e5nga paket kommer det att finnas? \u00c4r det runt 10, 100 eller 1000?<\/li>\n<li>Hur m\u00e5nga paket beh\u00f6ver teamet arbeta p\u00e5 vid en given tidpunkt?<\/li>\n<li>Hur t\u00e4tt kopplade \u00e4r paketen?<\/li>\n<li>\u00c4r olika programmeringsspr\u00e5k inblandade? Beh\u00f6ver de en viss <a href=\"https:\/\/kinsta.com\/se\/blog\/cms-programvarorna\/\">programvara<\/a> installerad eller speciell h\u00e5rdvara f\u00f6r att k\u00f6ra koden?<\/li>\n<li>Hur m\u00e5nga distributionsverktyg kr\u00e4vs, och hur komplexa \u00e4r de att konfigurera?<\/li>\n<li>Vad \u00e4r f\u00f6retagets kultur? Uppmuntras team att samarbeta med varandra?<\/li>\n<li>Vilka <a href=\"https:\/\/kinsta.com\/se\/blog\/webbutvecklingsverktyg\/\">verktyg och vilken teknik<\/a> kan teamen anv\u00e4nda?<\/li>\n<\/ul>\n\n<h2>Sammanfattning<\/h2>\n<p>Det finns tv\u00e5 huvudstrategier f\u00f6r att lagra och hantera kod: monorepo vs multi-repo. Monorepo-metoden inneb\u00e4r att koden lagras f\u00f6r olika bibliotek eller projekt \u2013 och till och med all kod fr\u00e5n ett f\u00f6retag \u2013 i ett enda f\u00f6rr\u00e5d. Och multi-repo-systemet delar upp koden i enheter, till exempel bibliotek eller tj\u00e4nster, och lagrar sin kod i oberoende f\u00f6rr\u00e5d.<\/p>\n<p>Vilket tillv\u00e4gag\u00e5ngss\u00e4tt du borde anv\u00e4nda beror p\u00e5 en m\u00e4ngd olika omst\u00e4ndighet. B\u00e5da strategierna har flera f\u00f6rdelar och nackdelar, och vi har g\u00e5tt igenom dem alla i detalj i den h\u00e4r artikeln.<\/p>\n<p><em>Har du n\u00e5gra fr\u00e5gor kvar om monorepo eller multi-repo? Ber\u00e4tta i kommentarerna nedan!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Det finns tv\u00e5 huvudstrategier f\u00f6r att lagra och hantera kod genom Git: monorepo vs multi-repo. B\u00e5da tillv\u00e4gag\u00e5ngss\u00e4tten har sina f\u00f6rdelar och nackdelar. Vi kan anv\u00e4nda b\u00e5da &#8230;<\/p>\n","protected":false},"author":196,"featured_media":41028,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[161,374],"topic":[816],"class_list":["post-41027","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-git","tag-github","topic-tekniska-tips"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier<\/title>\n<meta name=\"description\" content=\"Monorepo vs multi-repo - vilket \u00e4r b\u00e4st? Det finns f\u00f6rdelar och nackdelar f\u00f6r dem b\u00e5da. L\u00e4r dig f\u00f6rdelarna och nackdelarna med respektive tillv\u00e4gag\u00e5ngss\u00e4tt h\u00e4r.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/\" \/>\n<meta property=\"og:locale\" content=\"sv_SE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier\" \/>\n<meta property=\"og:description\" content=\"Monorepo vs multi-repo - vilket \u00e4r b\u00e4st? Det finns f\u00f6rdelar och nackdelar f\u00f6r dem b\u00e5da. L\u00e4r dig f\u00f6rdelarna och nackdelarna med respektive tillv\u00e4gag\u00e5ngss\u00e4tt h\u00e4r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstasweden\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-07T08:53:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-21T09:52:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Leonardo Losoviz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Monorepo vs multi-repo - vilket \u00e4r b\u00e4st? Det finns f\u00f6rdelar och nackdelar f\u00f6r dem b\u00e5da. L\u00e4r dig f\u00f6rdelarna och nackdelarna med respektive tillv\u00e4gag\u00e5ngss\u00e4tt h\u00e4r.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@losoviz\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_se\" \/>\n<meta name=\"twitter:label1\" content=\"Skriven av\" \/>\n\t<meta name=\"twitter:data1\" content=\"Leonardo Losoviz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Ber\u00e4knad l\u00e4stid\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minuter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/\"},\"author\":{\"name\":\"Leonardo Losoviz\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238\"},\"headline\":\"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier\",\"datePublished\":\"2021-10-07T08:53:27+00:00\",\"dateModified\":\"2023-09-21T09:52:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/\"},\"wordCount\":3071,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg\",\"keywords\":[\"git\",\"GitHub\"],\"articleSection\":[\"Webbutveckling\"],\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/\",\"url\":\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/\",\"name\":\"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg\",\"datePublished\":\"2021-10-07T08:53:27+00:00\",\"dateModified\":\"2023-09-21T09:52:21+00:00\",\"description\":\"Monorepo vs multi-repo - vilket \u00e4r b\u00e4st? Det finns f\u00f6rdelar och nackdelar f\u00f6r dem b\u00e5da. L\u00e4r dig f\u00f6rdelarna och nackdelarna med respektive tillv\u00e4gag\u00e5ngss\u00e4tt h\u00e4r.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#breadcrumb\"},\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/se\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tekniska tips\",\"item\":\"https:\/\/kinsta.com\/se\/topics\/tekniska-tips\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/se\/#website\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/se\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"sv-SE\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/se\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstasweden\/\",\"https:\/\/x.com\/kinsta_se\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238\",\"name\":\"Leonardo Losoviz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b28085726ee66e49f08be16ad668efd5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b28085726ee66e49f08be16ad668efd5?s=96&d=mm&r=g\",\"caption\":\"Leonardo Losoviz\"},\"description\":\"Leo writes about innovative web development trends, mostly concerning PHP, WordPress and GraphQL. You can find him at leoloso.com and twitter.com\/losoviz.\",\"sameAs\":[\"https:\/\/leoloso.com\",\"https:\/\/x.com\/losoviz\",\"https:\/\/www.youtube.com\/@GatoGraphQL\"],\"url\":\"https:\/\/kinsta.com\/se\/blog\/author\/leonardolosoviz\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier","description":"Monorepo vs multi-repo - vilket \u00e4r b\u00e4st? Det finns f\u00f6rdelar och nackdelar f\u00f6r dem b\u00e5da. L\u00e4r dig f\u00f6rdelarna och nackdelarna med respektive tillv\u00e4gag\u00e5ngss\u00e4tt h\u00e4r.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/","og_locale":"sv_SE","og_type":"article","og_title":"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier","og_description":"Monorepo vs multi-repo - vilket \u00e4r b\u00e4st? Det finns f\u00f6rdelar och nackdelar f\u00f6r dem b\u00e5da. L\u00e4r dig f\u00f6rdelarna och nackdelarna med respektive tillv\u00e4gag\u00e5ngss\u00e4tt h\u00e4r.","og_url":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstasweden\/","article_published_time":"2021-10-07T08:53:27+00:00","article_modified_time":"2023-09-21T09:52:21+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg","type":"image\/jpeg"}],"author":"Leonardo Losoviz","twitter_card":"summary_large_image","twitter_description":"Monorepo vs multi-repo - vilket \u00e4r b\u00e4st? Det finns f\u00f6rdelar och nackdelar f\u00f6r dem b\u00e5da. L\u00e4r dig f\u00f6rdelarna och nackdelarna med respektive tillv\u00e4gag\u00e5ngss\u00e4tt h\u00e4r.","twitter_image":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg","twitter_creator":"@losoviz","twitter_site":"@kinsta_se","twitter_misc":{"Skriven av":"Leonardo Losoviz","Ber\u00e4knad l\u00e4stid":"12 minuter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/"},"author":{"name":"Leonardo Losoviz","@id":"https:\/\/kinsta.com\/se\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238"},"headline":"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier","datePublished":"2021-10-07T08:53:27+00:00","dateModified":"2023-09-21T09:52:21+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/"},"wordCount":3071,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg","keywords":["git","GitHub"],"articleSection":["Webbutveckling"],"inLanguage":"sv-SE","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/","url":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/","name":"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg","datePublished":"2021-10-07T08:53:27+00:00","dateModified":"2023-09-21T09:52:21+00:00","description":"Monorepo vs multi-repo - vilket \u00e4r b\u00e4st? Det finns f\u00f6rdelar och nackdelar f\u00f6r dem b\u00e5da. L\u00e4r dig f\u00f6rdelarna och nackdelarna med respektive tillv\u00e4gag\u00e5ngss\u00e4tt h\u00e4r.","breadcrumb":{"@id":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#breadcrumb"},"inLanguage":"sv-SE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/"]}]},{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#primaryimage","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2021\/10\/monorepo-vs-multi-repo.jpeg","width":1460,"height":730,"caption":"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/se\/blog\/monorepo-vs-multi-repo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/se\/"},{"@type":"ListItem","position":2,"name":"Tekniska tips","item":"https:\/\/kinsta.com\/se\/topics\/tekniska-tips\/"},{"@type":"ListItem","position":3,"name":"Monorepo vs Multi-Repo: F\u00f6rdelar och nackdelar med olika kodf\u00f6rr\u00e5dsstrategier"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/se\/#website","url":"https:\/\/kinsta.com\/se\/","name":"Kinsta\u00ae","description":"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar","publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/se\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"sv-SE"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/se\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/se\/","logo":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstasweden\/","https:\/\/x.com\/kinsta_se","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/se\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238","name":"Leonardo Losoviz","image":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b28085726ee66e49f08be16ad668efd5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b28085726ee66e49f08be16ad668efd5?s=96&d=mm&r=g","caption":"Leonardo Losoviz"},"description":"Leo writes about innovative web development trends, mostly concerning PHP, WordPress and GraphQL. You can find him at leoloso.com and twitter.com\/losoviz.","sameAs":["https:\/\/leoloso.com","https:\/\/x.com\/losoviz","https:\/\/www.youtube.com\/@GatoGraphQL"],"url":"https:\/\/kinsta.com\/se\/blog\/author\/leonardolosoviz\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/41027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/users\/196"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/comments?post=41027"}],"version-history":[{"count":3,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/41027\/revisions"}],"predecessor-version":[{"id":55158,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/41027\/revisions\/55158"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41027\/translations\/en"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41027\/translations\/de"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41027\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41027\/translations\/it"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41027\/translations\/es"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41027\/translations\/pt"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41027\/translations\/nl"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41027\/translations\/se"},{"href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/41027\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media\/41028"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media?parent=41027"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/tags?post=41027"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/topic?post=41027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}