{"id":47191,"date":"2021-08-27T14:32:32","date_gmt":"2021-08-27T12:32:32","guid":{"rendered":"https:\/\/kinsta.com\/?p=100242"},"modified":"2023-09-12T15:06:55","modified_gmt":"2023-09-12T14:06:55","slug":"monorepo-vs-multi-repo","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/","title":{"rendered":"Monorepo vs Multi-Repo: Pro e Contro delle Strategie di Repository del Codice"},"content":{"rendered":"<p class=\"p1\">Ci sono due strategie principali per <a href=\"https:\/\/kinsta.com\/it\/prezzi\/\">ospitare<\/a> e gestire il codice attraverso Git: monorepo vs multi-repo. Entrambi gli approcci hanno i loro pro e contro e possiamo usarli per qualsiasi codebase in qualsiasi lingua. \u00c8 possibile usare una qualsiasi di queste strategie per progetti che contengono da una manciata a migliaia di <a href=\"https:\/\/kinsta.com\/it\/blog\/librerie-javascript\/\">librerie<\/a>.<br \/>\nLa scelta tra monorepo o multi-repo varia in base a molti fattori, e potete optare per l\u2019una o l\u2019altra sia che abbiate pochi membri nel team o centinaia, che vogliate ospitare codice privato o open-source.<\/p>\n<p class=\"p1\">Quali sono i vantaggi e gli svantaggi di ogni approccio? Quando dovremmo usare l&#8217;uno o l&#8217;altro? Scopriamolo!<\/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>Cosa Sono i Repo?<\/h2>\n<p class=\"p1\">Un repo (abbreviazione di repository) \u00e8 un archivio per tutti i cambiamenti e i file di un progetto che permette a sviluppatrici e sviluppatori di &#8220;controllare le versioni&#8221; delle risorse del progetto durante tutta la sua fase di sviluppo.<\/p>\n<p class=\"p1\">Di solito ci riferiamo ai repository <a href=\"https:\/\/kinsta.com\/it\/docs\/hosting-wordpress\/gestione-sito\/git\/\">Git<\/a> (come quelli forniti da <a href=\"https:\/\/kinsta.com\/it\/blog\/git-contro-github\/\">GitHub<\/a>, <a href=\"https:\/\/kinsta.com\/it\/blog\/gitlab-vs-github\/\">GitLab<\/a>, o <a href=\"https:\/\/kinsta.com\/it\/blog\/bitbucket-e-github\/\">Bitbucket<\/a>), ma il concetto si applica anche ad altri sistemi di controllo di versione (come Mercurial).<\/p>\n\n<h2>Cos&#8217;\u00c8 un Monorepo?<\/h2>\n<p class=\"p1\">L&#8217;approccio monorepo usa un singolo <a href=\"https:\/\/kinsta.com\/it\/blog\/bitbucket-e-github\/\">repository<\/a> per ospitare tutto il codice per le molteplici librerie o servizi che compongono i progetti di un&#8217;azienda. Al suo estremo, l&#8217;intero codebase di un&#8217;azienda &#8211; che abbraccia vari progetti e codifica in diversi linguaggi &#8211; \u00e8 ospitata in un unico repository.<\/p>\n<h2>Vantaggi di Monorepo<\/h2>\n<p class=\"p1\">Ospitare l&#8217;intero codebase su un singolo repository offre diversi vantaggi. Li vediamo di seguito:<\/p>\n<h3>Abbassa le Barriere d&#8217;Ingresso<\/h3>\n<p class=\"p1\">Quando nuove persone iniziano a lavorare per un\u2019azienda, hanno bisogno di scaricare il codice e installare gli strumenti necessari per iniziare a occuparsi dei loro compiti. Supponiamo che il progetto sia suddiviso su molti repository, ognuno dei quali ha le sue istruzioni di installazione e gli strumenti richiesti. In questo caso, la configurazione iniziale sar\u00e0 complessa e il pi\u00f9 delle volte la documentazione non sar\u00e0 completa, cosa che richiede alle nuove persone del team di rivolgersi ai colleghi per un aiuto.<\/p>\n<p class=\"p1\">Un monorepo semplifica le cose. Dal momento che c&#8217;\u00e8 un unico luogo che contiene tutto il codice e la <a href=\"https:\/\/kinsta.com\/it\/docs\/devkinsta\/\">documentazione<\/a>, \u00e8 possibile semplificare la configurazione iniziale.<\/p>\n<h3>Gestione del Codice a Livello Centrale<\/h3>\n<p class=\"p1\">Avere un unico repository permette a tutte le persone del team sviluppo di avere visibilit\u00e0 su tutto il codice. Semplifica la gestione del codice perch\u00e9 possiamo usare un unico issue tracker per controllare tutti i problemi durante il ciclo di vita dell&#8217;applicazione.<\/p>\n<p class=\"p1\">Queste caratteristiche sono per esempio preziose quando un problema si estende su due (o pi\u00f9) librerie child con un bug esistente sulla libreria dipendente. Con pi\u00f9 repository, pu\u00f2 essere difficile <a href=\"https:\/\/kinsta.com\/it\/blog\/ispeziona-elemento\/\">trovare il pezzo di codice<\/a> in cui si verifica il problema.<\/p>\n<p class=\"p1\">Oltre a questo, avremmo bisogno di capire quale repository usare per creare la issue e poi invitare con cross-tag i membri di altri team per aiutare a risolvere il problema.<\/p>\n<p class=\"p1\">Con un monorepo, per\u00f2, sia la localizzazione dei problemi del codice che la collaborazione per la risoluzione dei problemi diventano pi\u00f9 semplici da realizzare.<\/p>\n<h3>Refactoring Indolore a Livello di Applicazione<\/h3>\n<p class=\"p1\">Quando si crea un refactoring del codice a livello di applicazione, saranno interessate pi\u00f9 librerie. Se le state ospitando tramite repository multipli, gestire tutte le diverse richieste di pull per mantenerle sincronizzate tra loro pu\u00f2 rivelarsi una sfida.<\/p>\n<p class=\"p1\">Un monorepo facilita l\u2019esecuzione di tutte le modifiche su tutto il codice per tutte le librerie per presentarle sotto un\u2019unica pull request.<\/p>\n<h3>\u00c8 Pi\u00f9 Difficile Rompere Funzionalit\u00e0 Adiacenti<\/h3>\n<p class=\"p1\">Con il monorepo possiamo impostare tutti i test per tutte le librerie da eseguire ogni volta che una singola libreria viene modificata. Di conseguenza, la probabilit\u00e0 che le modifiche in alcune librerie abbiano effetti negativi sulle altre si riduce.<\/p>\n<h3>I Team Condividono la Cultura dello Sviluppo<\/h3>\n<p class=\"p1\">Anche se non impossibile, con un approccio monorepo diventa difficile ispirare sottoculture uniche tra diversi team. Dal momento che condivideranno lo stesso repository, molto probabilmente condivideranno le stesse metodologie di <a href=\"https:\/\/kinsta.com\/it\/blog\/miglior-linguaggio-di-programmazione\/\">programmazione<\/a> e gestione e useranno gli stessi <a href=\"https:\/\/kinsta.com\/it\/blog\/strumenti-apm\/\">strumenti di sviluppo<\/a>.<\/p>\n<h2>Problemi con l&#8217;Approccio Monorepo<\/h2>\n<p class=\"p1\">Usare un unico repository per tutto il nostro codice ha diversi svantaggi.<\/p>\n<h3>Cicli di Sviluppo pi\u00f9 Lenti<\/h3>\n<p class=\"p1\">Quando il codice di una libreria contiene modifiche che fanno fallire i test per le librerie dipendenti, anche il codice va corretto prima di unire le modifiche.<\/p>\n<p class=\"p1\">Se queste librerie dipendono da altri team, che sono occupati a lavorare su qualche altro compito e non sono in grado (o disposti) ad adattare il loro codice per superare i test, lo sviluppo della nuova funzionalit\u00e0 pu\u00f2 bloccarsi.<\/p>\n<p class=\"p1\">Inoltre, il progetto potrebbe iniziare ad avanzare alla velocit\u00e0 del team pi\u00f9 lento dell&#8217;azienda. Questo risultato potrebbe essere frustrante per i membri dei team pi\u00f9 veloci, creando condizioni che potrebbero invogliare a lasciare l&#8217;azienda.<\/p>\n<p class=\"p1\">Inoltre, una libreria dovr\u00e0 eseguire i test anche per tutte le altre librerie. <a href=\"https:\/\/kinsta.com\/it\/blog\/speed-test-sito-web\/\">Pi\u00f9 test ci sono<\/a>, pi\u00f9 tempo ci vuole per eseguirli, e questo rallenta la velocit\u00e0 con cui possiamo iterare il nostro codice.<\/p>\n<h3>Richiede il Download dell&#8217;Intero Codebase<\/h3>\n<p class=\"p1\">Quando il monorepo contiene tutto il codice di un\u2019azienda, pu\u00f2 diventare enorme e contenere diversi gigabyte di dati. Per contribuire a qualsiasi libreria ospitata al suo interno, ci sarebbe bisogno di scaricare l&#8217;intero repository.<\/p>\n<p class=\"p1\">Avere a che fare con un codebase ingente implica un cattivo uso dello spazio sui nostri dischi rigidi e interazioni pi\u00f9 lente con esso. Per esempio, le azioni quotidiane come l&#8217;esecuzione di <code>git status<\/code> o la ricerca nel codebase con una regex possono richiedere molti secondi o addirittura minuti in pi\u00f9 rispetto a quanto accadrebbe con pi\u00f9 repo.<\/p>\n<h3>Le Librerie Non Modificate Possono Essere di Nuova Versione<\/h3>\n<p class=\"p1\">Quando <a href=\"https:\/\/kinsta.com\/it\/blog\/tag-di-wordpress\/\">tagghiamo<\/a> il monorepo, tutto il codice al suo interno adotta il nuovo tag. Se questa azione innesca un nuovo rilascio, allora tutte le librerie ospitate nel repository saranno nuovamente rilasciate con il numero di versione del tag, anche se molte di queste librerie potrebbero non aver subito alcun cambiamento.<\/p>\n<h3>Il Forking \u00c8 Pi\u00f9 Difficile<\/h3>\n<p class=\"p1\">I progetti open source devono facilitare il pi\u00f9 possibile il coinvolgimento dei collaboratori. Con repository multipli, i collaboratori possono andare direttamente al repository specifico per il progetto a cui vogliono contribuire. Nel caso di un monorepo che ospita vari progetti, per\u00f2, i collaboratori devono prima orientarsi nel progetto giusto e avranno bisogno di capire come il loro contributo pu\u00f2 influenzare tutti gli altri progetti.<\/p>\n<h2>Cos&#8217;\u00c8 il Multi-Repo?<\/h2>\n<p class=\"p1\">L&#8217;approccio multi-repo utilizza diversi repository per ospitare le molteplici librerie o servizi di un progetto sviluppato da un&#8217;azienda. Al suo estremo, ospiter\u00e0 ogni minimo set di codice riutilizzabile o funzionalit\u00e0 autonoma (come un microservizio) sotto il suo repository.<\/p>\n<h2>Vantaggi del Multi-Repo<\/h2>\n<p class=\"p1\">Ospitare ogni libreria indipendentemente da tutte le altre presenta moltissimi vantaggi.<\/p>\n<h3>Versioning Indipendente della Libreria<\/h3>\n<p class=\"p1\">Quando si tagga un repository, a tutto il suo codebase viene assegnato il tag &#8220;new&#8221;. Dal momento che solo il codice di una specifica libreria \u00e8 sul repository, la libreria pu\u00f2 essere taggata e messa in versione indipendentemente da tutte le altre librerie ospitate altrove.<\/p>\n<p class=\"p1\">Avere una versione indipendente per ogni libreria aiuta a definire l&#8217;albero delle dipendenze per l&#8217;applicazione, e ci permette di configurare la versione di ogni libreria da usare.<\/p>\n<h3>Rilascio di Servizio Indipendente<\/h3>\n<p class=\"p1\">Dal momento che il repository contiene solo il codice per qualche servizio e nient&#8217;altro, pu\u00f2 avere un proprio ciclo di deployment, indipendentemente da qualsiasi progresso delle applicazioni che vi accedono.<\/p>\n<p class=\"p1\">Il servizio pu\u00f2 usare un ciclo di rilascio veloce come la distribuzione continua (dove il nuovo codice viene distribuito dopo che ha superato tutti i test). Alcune librerie che accedono al servizio possono usare un ciclo di rilascio pi\u00f9 lento, come quelle che producono un nuovo rilascio solo una volta alla settimana.<\/p>\n<h3>Aiuta a Definire il Controllo degli Accessi in Tutta l&#8217;Organizzazione<\/h3>\n<p class=\"p1\">Solo i membri del team coinvolti nello sviluppo di una libreria devono essere aggiunti al repository corrispondente e scaricare il suo codice. Di conseguenza, c&#8217;\u00e8 una strategia implicita di controllo degli accessi per ogni livello dell&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/monitoraggio-prestazioni-applicazioni\/\">applicazione<\/a>. Le persone coinvolte con la libreria avranno i permessi di modifica, mentre tutte le altre potrebbero non avere accesso al repository. Oppure possono ricevere permessi di lettura ma senza modifica.<\/p>\n<h3>Permette ai Team di Lavorare in Modo Autonomo<\/h3>\n<p class=\"p1\">I membri del team possono progettare l&#8217;architettura della libreria e implementare il suo codice lavorando in isolamento da tutti gli altri team. Possono prendere decisioni basate su ci\u00f2 che la libreria fa nel contesto generale senza essere influenzati dai requisiti specifici di qualche team o applicazione esterna.<\/p>\n<h2>Problemi con l&#8217;Approccio Multi-Repo<\/h2>\n<p class=\"p1\">L&#8217;utilizzo di pi\u00f9 repository pu\u00f2 dare origine a diversi problemi.<\/p>\n<h3>Le Librerie Devono Essere Costantemente Risincronizzate<\/h3>\n<p class=\"p1\">Quando viene rilasciata una nuova versione di una libreria che contiene modifiche, le librerie che dipendono da questa libreria dovranno essere adattate per iniziare a usare l&#8217;ultima versione. Se il ciclo di rilascio della libreria \u00e8 pi\u00f9 veloce di quello delle sue librerie dipendenti, esse potrebbero perdere rapidamente la sincronizzazione<\/p>\n<p class=\"p1\">I team avranno bisogno di mettersi costantemente in pari per usare le ultime release degli altri team. Dato che diversi team hanno diverse priorit\u00e0, questo obiettivo pu\u00f2 a volte essere difficile da raggiungere.<\/p>\n<p class=\"p1\">Di conseguenza, un team che non \u00e8 in grado di recuperare il ritardo pu\u00f2 finire con l&#8217;attenersi alla versione obsoleta della libreria da cui dipende. Questo risultato avr\u00e0 un certo impatto sull&#8217;applicazione (in termini di sicurezza, velocit\u00e0 e altre considerazioni), e il divario nello sviluppo tra le librerie pu\u00f2 solo aumentare.<\/p>\n<h3>Pu\u00f2 Frammentare i Team<\/h3>\n<p class=\"p1\">Quando i diversi team non hanno bisogno di interagire tra loro, finiscono a lavorare nei loro silos. A lungo termine, questo potrebbe portare i team a generare delle sottoculture aziendali, come l&#8217;impiego di diverse metodologie di programmazione o di gestione, o l&#8217;utilizzo di diversi set di strumenti di sviluppo.<\/p>\n<p class=\"p1\">Se poi qualche membro del team deve passare a un team diverso, potrebbe scontrarsi con un certo shock culturale e dover imparare un nuovo modo di fare il suo lavoro.<\/p>\n<h2>Monorepo vs Multi-Repo: Differenze Principali<\/h2>\n<p class=\"p1\">Entrambi gli approcci alla fine si occupano dello stesso obiettivo: gestire il codebase. Questo significa che entrambi devono risolvere le stesse sfide, tra cui la gestione dei rilasci, la promozione della <a href=\"https:\/\/kinsta.com\/it\/blog\/microsoft-teams-contro-slack\/\">collaborazione tra i membri del team<\/a>, la gestione dei problemi, l&#8217;esecuzione dei test e altro.<\/p>\n<p class=\"p1\">La loro principale differenza riguarda le tempistiche con cui i membri del team devono prendere le decisioni: in anticipo per i monorepo, a posteriori per i multi-repo.<\/p>\n<p class=\"p1\">Analizziamo questa idea in modo pi\u00f9 dettagliato.<\/p>\n<p class=\"p1\">Poich\u00e9 tutte le librerie sono versionate indipendentemente nel multi-repo, un team che rilascia una libreria con modifiche che rompono il codice pu\u00f2 agire in modo sicuro assegnando un nuovo numero di versione principale all&#8217;ultima release. Altri gruppi possono far aderire le loro librerie dipendenti alla vecchia versione e passare a quella nuova una volta che il loro codice \u00e8 stato adattato.<\/p>\n<p class=\"p1\">Questo approccio lascia la decisione di quando adattare tutte le altre librerie a ciascun team responsabile, che pu\u00f2 farlo in qualsiasi momento. Se lo fanno troppo tardi e vengono rilasciate nuove versioni delle librerie, colmare il divario tra le librerie diventer\u00e0 sempre pi\u00f9 difficile.<\/p>\n<p class=\"p1\">Di conseguenza, mentre un team pu\u00f2 iterare velocemente e con frequenza il proprio codice, gli altri team possono dimostrarsi incapaci di mettersi al passo, producendo alla fine librerie che divergono.<\/p>\n<p class=\"p1\">D&#8217;altra parte, in un ambiente monorepo, non possiamo rilasciare una nuova versione di una libreria che ne rompe altre perch\u00e9 i loro test fallirebbero. In questo caso, il primo team deve comunicare con il secondo team per incorporare le modifiche.<\/p>\n<p class=\"p1\">Questo approccio obbliga i team ad adattare <a href=\"https:\/\/kinsta.com\/it\/blog\/librerie-javascript\/\">tutte le librerie<\/a> allo stesso tempo ogni volta che viene implementato un cambiamento per una singola libreria. Tutti i team sono costretti a parlare tra loro e a raggiungere una soluzione insieme.<\/p>\n<p class=\"p1\">Di conseguenza, il primo team non sar\u00e0 in grado di iterare velocemente come vorrebbe, ma perlomeno il codice tra le diverse librerie non diverger\u00e0.<\/p>\n<p class=\"p1\">In sintesi, l&#8217;approccio multi-repo pu\u00f2 aiutare a creare una cultura del &#8220;muoviti in fretta e rompi tutto&#8221; tra i team, dove i team indipendenti e agili possono produrre il loro output alla velocit\u00e0 che vogliono. Invece, l&#8217;approccio monorepo favorisce una cultura di consapevolezza e cura, dove i team non dovrebbero essere lasciati indietro ad affrontare un problema da soli.<\/p>\n<h2>Approccio Ibrido Poly-As-Mono<\/h2>\n<p class=\"p1\">Se non possiamo decidere se usare l&#8217;approccio multi-repo o monorepo, c&#8217;\u00e8 anche l&#8217;approccio intermedio: usare pi\u00f9 repository e impiegare qualche strumento per tenerli sincronizzati, rendendolo simile a un monorepo ma con pi\u00f9 flessibilit\u00e0.<\/p>\n<p class=\"p1\"><a href=\"https:\/\/github.com\/mateodelnorte\/meta\">Meta<\/a> \u00e8 uno di questi strumenti. Organizza pi\u00f9 repository in sottodirectory e fornisce un&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/come-utilizzare-ssh\/\">interfaccia a riga di comando<\/a> che esegue lo stesso comando su tutti loro contemporaneamente.<\/p>\n<p class=\"p1\">Un meta-repository contiene le informazioni su quali repository compongono un progetto. Clonando questo repository tramite meta si cloneranno ricorsivamente tutti i repository richiesti, e questo permette ai nuovi membri del team di iniziare a lavorare immediatamente sui loro progetti.<\/p>\n<p class=\"p1\">Per clonare un meta-repository e tutti i suoi repo multipli definiti, dobbiamo eseguire quanto segue:<\/p>\n<pre><code class=\"language-bash\">meta git clone [meta repo url]\n<\/code><\/pre>\n<p class=\"p1\">Meta eseguir\u00e0 un <code>git clone<\/code> per ogni repository e lo metter\u00e0 in una sottocartella:<\/p>\n<figure id=\"attachment_100243\" aria-describedby=\"caption-attachment-100243\" 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\" class=\"wp-image-100243 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/07\/meta-cloning-1024x755.png\" alt=\"Clonare un metaprogetto. \" width=\"1024\" height=\"755\"><\/a><figcaption id=\"caption-attachment-100243\" class=\"wp-caption-text\">Clonare un metaprogetto. (Fonte immagine: <a href=\"https:\/\/github.com\/mateodelnorte\/meta\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/mateodelnorte\/meta<\/a>)<\/figcaption><\/figure>\n<p class=\"p1\">Da quel momento in poi, l&#8217;esecuzione del comando <code>meta exec<\/code>eseguir\u00e0 il comando su ogni sottocartella. Per esempio, per eseguire <code>git checkout master<\/code> su ogni repository si fa cos\u00ec:<\/p>\n<pre><code class=\"language-bash\">meta exec \"git checkout master\"\n<\/code><\/pre>\n<h2>Approccio Ibrido Mono-As-Poly<\/h2>\n<p class=\"p1\">Un altro approccio \u00e8 gestire il codice tramite un monorepo per lo sviluppo, ma copiare il codice di ogni libreria nel suo repository indipendente per il deployment.<\/p>\n<p class=\"p1\">Questa strategia \u00e8 molto comune nell&#8217;ecosistema PHP perch\u00e9 <a href=\"https:\/\/packagist.org\/\">Packagist<\/a> (il repository principale di <a href=\"https:\/\/getcomposer.org\/\">Composer<\/a>) richiede un <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-un-url\/\">URL<\/a> pubblico del repository per pubblicare un pacchetto, e non \u00e8 possibile indicare che il pacchetto si trova in una sottodirectory del repository.<\/p>\n<p class=\"p1\">Data la limitazione di Packagist, i <a href=\"https:\/\/graphql-api.com\/blog\/extending-the-monorepo-builder\/\">progetti PHP possono ancora usare un monorepo per lo sviluppo<\/a>, ma devono usare l&#8217;approccio multi-repo per il deployment.<\/p>\n<p class=\"p1\">Per ottenere questa conversione, possiamo <a href=\"https:\/\/stackoverflow.com\/questions\/359424\/detach-move-subdirectory-into-separate-git-repository\/17864475#17864475\">eseguire uno script con <code>git subtree split<\/code><\/a> o usare uno degli strumenti disponibili che eseguono la stessa logica:<\/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 class=\"li1\"><a href=\"https:\/\/github.com\/symplify\/monorepo-split-github-action\">GitHub Action for Monorepo Split<\/a><\/li>\n<\/ul>\n<h2>Chi Sceglie Monorepo vs Multi-Repo<\/h2>\n<p class=\"p1\">Diverse grandi aziende tecnologiche favoriscono l&#8217;approccio monorepo, mentre altre hanno deciso di utilizzare il metodo multi-repo.<\/p>\n<p class=\"p1\"><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> e <a href=\"https:\/\/www.youtube.com\/watch?v=lV8-1S28ycM\">Uber<\/a> hanno tutti garantito pubblicamente di adottare l&#8217;approccio monorepo. Microsoft <a href=\"https:\/\/devblogs.microsoft.com\/bharry\/the-largest-git-repo-on-the-planet\/\">gestisce il pi\u00f9 grande monorepo Git del pianeta<\/a> per ospitare il codice sorgente del sistema operativo Windows.<\/p>\n<p class=\"p1\">Sul lato opposto, <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 e Lyft<\/a> sono alcune delle aziende famose che usano l&#8217;approccio multi-repo.<\/p>\n<p class=\"p1\">Sul lato ibrido poly-as-mono, <a href=\"https:\/\/source.android.com\/setup\/create\/coding-tasks\">Android<\/a> aggiorna pi\u00f9 repository, che sono gestiti come un monorepo.<\/p>\n<p class=\"p1\">Sul lato ibrido mono-as-poly, <a href=\"https:\/\/kinsta.com\/it\/blog\/framework-php\/#symfony\">Symfony<\/a> mantiene il codice per tutti i suoi componenti in un monorepo. Lo dividono in repository indipendenti per il deployment (come <a href=\"https:\/\/github.com\/symfony\/dependency-injection\"><code>symfony\/dependency-injection<\/code><\/a> e <a href=\"https:\/\/github.com\/symfony\/event-dispatcher\"><code>symfony\/event-dispatcher<\/code><\/a>.)<\/p>\n<h2>Esempi di Monorepo e Multi-Repo<\/h2>\n<p class=\"p1\"><a href=\"https:\/\/github.com\/WordPress\/WordPress\">L&#8217;account WordPress su GitHub<\/a> ospita esempi di entrambi gli approcci monorepo e multi-repo.<\/p>\n<p class=\"p1\"><a href=\"https:\/\/kinsta.com\/it\/blog\/gutenberg-editor-wordpress\/\">Gutenberg<\/a>, l&#8217;editor a blocchi di WordPress, \u00e8 composto da diverse decine di pacchetti <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-javascript\/\">JavaScript<\/a>. Questi pacchetti sono tutti ospitati sul <a href=\"https:\/\/github.com\/WordPress\/gutenberg\">monorepo <code>WordPress\/gutenberg<\/code><\/a> e gestiti attraverso <a href=\"https:\/\/github.com\/lerna\/lerna\">Lerna<\/a> per aiutare a pubblicarli nel repository <a href=\"https:\/\/kinsta.com\/it\/blog\/node-js\/#what-is-npm\">npm<\/a>.<\/p>\n<p class=\"p1\"><a href=\"https:\/\/wordpress.org\/news\/2021\/05\/welcome-to-openverse\/\">Openverse<\/a>, il motore di ricerca per media con licenza aperta, <a href=\"https:\/\/github.com\/WordPress\/openverse\/blob\/918b7cf1b6323291ab16c1ad5a27f3733709ec17\/README.md#openverse\">ospita le sue parti principali<\/a> in repository indipendenti: <a href=\"https:\/\/github.com\/wordpress\/openverse-frontend\">Front-end<\/a>, <a href=\"https:\/\/github.com\/wordpress\/openverse-catalog\">Catalog<\/a> e <a href=\"https:\/\/github.com\/wordpress\/openverse-api\">API<\/a>.<\/p>\n<h2>Monorepo vs Multi-Repo: Come Scegliere?<\/h2>\n<p class=\"p1\">Come per molti problemi di sviluppo, non c&#8217;\u00e8 una risposta predefinita su quale approccio \u00e8 meglio usare. Aziende e progetti diversi beneficeranno di una strategia o dell&#8217;altra in base al loro contesto unico, come:<\/p>\n<ul>\n<li class=\"li1\">Quanto \u00e8 grande il codebase? Contiene gigabyte di dati?<\/li>\n<li class=\"li1\">Quante persone lavoreranno sul codebase? 10, 100, 1000?<\/li>\n<li class=\"li1\">Quanti pacchetti ci saranno? 10, 100, 1000?<\/li>\n<li class=\"li1\">Su quanti pacchetti deve lavorare il team in un dato momento?<\/li>\n<li class=\"li1\">Quanto sono strettamente accoppiati tra loro i pacchetti?<\/li>\n<li class=\"li1\">Sono coinvolti diversi linguaggi di programmazione? Richiedono l\u2019installazione di un <a href=\"https:\/\/kinsta.com\/it\/blog\/software-cms\/\">software<\/a> particolare o un hardware speciale per funzionare?<\/li>\n<li class=\"li1\">Quanti strumenti di distribuzione sono necessari e quanto sono complessi da impostare?<\/li>\n<li class=\"li1\">Qual \u00e8 la cultura dell&#8217;azienda? I team sono incoraggiati a collaborare?<\/li>\n<li class=\"li1\">Quali <a href=\"https:\/\/kinsta.com\/it\/blog\/strumenti-sviluppo-web\/\">strumenti e tecnologie<\/a> sanno usare i team?<\/li>\n<\/ul>\n\n<h2>Riepilogo<\/h2>\n<p class=\"p1\">Ci sono due strategie principali per ospitare e gestire il codice: monorepo vs multi-repo. L&#8217;approccio monorepo comporta la memorizzazione del codice per diverse librerie o progetti &#8211; o anche tutto il codice di una societ\u00e0 &#8211; in un unico repository. Il sistema multi-repo, invece, divide il codice in unit\u00e0, come librerie o servizi, e mantiene il loro codice ospitato in repository indipendenti.<\/p>\n<p class=\"p1\">Quale approccio scegliere dipende da molteplici condizioni. Entrambe le strategie presentano diversi vantaggi e svantaggi, e li abbiamo coperti tutti in dettaglio in questo articolo.<\/p>\n<p class=\"p1\"><em>Avete domande su monorepo o multi-repo? Scrivetecele nella sezione commenti!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ci sono due strategie principali per ospitare e gestire il codice attraverso Git: monorepo vs multi-repo. Entrambi gli approcci hanno i loro pro e contro e &#8230;<\/p>\n","protected":false},"author":196,"featured_media":47194,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[7701,25580],"topic":[25992],"class_list":["post-47191","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-git","tag-github","topic-suggerimenti-tecnici"],"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: Pro e Contro delle Strategie di Repository del Codice<\/title>\n<meta name=\"description\" content=\"Monorepo vs multi-repo: qual \u00e8 la soluzione migliore? Ognuno ha i suoi pro e contro. Scopri i vantaggi e gli svantaggi dei due approcci.\" \/>\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\/it\/blog\/monorepo-vs-multi-repo\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Monorepo vs Multi-Repo: Pro e Contro delle Strategie di Repository del Codice\" \/>\n<meta property=\"og:description\" content=\"Monorepo vs multi-repo: qual \u00e8 la soluzione migliore? Ognuno ha i suoi pro e contro. Scopri i vantaggi e gli svantaggi dei due approcci.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-08-27T12:32:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-12T14:06:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/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: qual \u00e8 la soluzione migliore? Ognuno ha i suoi pro e contro. Scopri i vantaggi e gli svantaggi dei due approcci.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/monorepo-vs-multi-repo.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@losoviz\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Leonardo Losoviz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/\"},\"author\":{\"name\":\"Leonardo Losoviz\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238\"},\"headline\":\"Monorepo vs Multi-Repo: Pro e Contro delle Strategie di Repository del Codice\",\"datePublished\":\"2021-08-27T12:32:32+00:00\",\"dateModified\":\"2023-09-12T14:06:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/\"},\"wordCount\":2802,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/monorepo-vs-multi-repo.jpeg\",\"keywords\":[\"git\",\"GitHub\"],\"articleSection\":[\"Sviluppo Web\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/\",\"name\":\"Monorepo vs Multi-Repo: Pro e Contro delle Strategie di Repository del Codice\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/monorepo-vs-multi-repo.jpeg\",\"datePublished\":\"2021-08-27T12:32:32+00:00\",\"dateModified\":\"2023-09-12T14:06:55+00:00\",\"description\":\"Monorepo vs multi-repo: qual \u00e8 la soluzione migliore? Ognuno ha i suoi pro e contro. Scopri i vantaggi e gli svantaggi dei due approcci.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/monorepo-vs-multi-repo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/monorepo-vs-multi-repo.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Monorepo vs Multi-Repo: Pro e contro delle strategie di deposito del codice\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Suggerimenti Tecnici\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/suggerimenti-tecnici\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Monorepo vs Multi-Repo: Pro e Contro delle Strategie di Repository del Codice\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"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\/it\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238\",\"name\":\"Leonardo Losoviz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/leonardolosoviz\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Monorepo vs Multi-Repo: Pro e Contro delle Strategie di Repository del Codice","description":"Monorepo vs multi-repo: qual \u00e8 la soluzione migliore? Ognuno ha i suoi pro e contro. Scopri i vantaggi e gli svantaggi dei due approcci.","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\/it\/blog\/monorepo-vs-multi-repo\/","og_locale":"it_IT","og_type":"article","og_title":"Monorepo vs Multi-Repo: Pro e Contro delle Strategie di Repository del Codice","og_description":"Monorepo vs multi-repo: qual \u00e8 la soluzione migliore? Ognuno ha i suoi pro e contro. Scopri i vantaggi e gli svantaggi dei due approcci.","og_url":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2021-08-27T12:32:32+00:00","article_modified_time":"2023-09-12T14:06:55+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/monorepo-vs-multi-repo.jpeg","type":"image\/jpeg"}],"author":"Leonardo Losoviz","twitter_card":"summary_large_image","twitter_description":"Monorepo vs multi-repo: qual \u00e8 la soluzione migliore? Ognuno ha i suoi pro e contro. Scopri i vantaggi e gli svantaggi dei due approcci.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/monorepo-vs-multi-repo.jpeg","twitter_creator":"@losoviz","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Leonardo Losoviz","Tempo di lettura stimato":"13 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/"},"author":{"name":"Leonardo Losoviz","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238"},"headline":"Monorepo vs Multi-Repo: Pro e Contro delle Strategie di Repository del Codice","datePublished":"2021-08-27T12:32:32+00:00","dateModified":"2023-09-12T14:06:55+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/"},"wordCount":2802,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/monorepo-vs-multi-repo.jpeg","keywords":["git","GitHub"],"articleSection":["Sviluppo Web"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/","url":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/","name":"Monorepo vs Multi-Repo: Pro e Contro delle Strategie di Repository del Codice","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/monorepo-vs-multi-repo.jpeg","datePublished":"2021-08-27T12:32:32+00:00","dateModified":"2023-09-12T14:06:55+00:00","description":"Monorepo vs multi-repo: qual \u00e8 la soluzione migliore? Ognuno ha i suoi pro e contro. Scopri i vantaggi e gli svantaggi dei due approcci.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/monorepo-vs-multi-repo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2021\/08\/monorepo-vs-multi-repo.jpeg","width":1460,"height":730,"caption":"Monorepo vs Multi-Repo: Pro e contro delle strategie di deposito del codice"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/monorepo-vs-multi-repo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Suggerimenti Tecnici","item":"https:\/\/kinsta.com\/it\/argomenti\/suggerimenti-tecnici\/"},{"@type":"ListItem","position":3,"name":"Monorepo vs Multi-Repo: Pro e Contro delle Strategie di Repository del Codice"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","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\/it\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238","name":"Leonardo Losoviz","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/leonardolosoviz\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/47191","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/196"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=47191"}],"version-history":[{"count":16,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/47191\/revisions"}],"predecessor-version":[{"id":73010,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/47191\/revisions\/73010"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/47191\/translations\/en"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/47191\/translations\/de"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/47191\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/47191\/translations\/it"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/47191\/translations\/es"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/47191\/translations\/pt"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/47191\/translations\/nl"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/47191\/translations\/se"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/47191\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/47194"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=47191"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=47191"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=47191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}