{"id":43993,"date":"2021-08-30T09:26:23","date_gmt":"2021-08-30T07:26:23","guid":{"rendered":"https:\/\/kinqsta.com\/?p=100242"},"modified":"2025-02-07T11:16:08","modified_gmt":"2025-02-07T14:16:08","slug":"monorepo-vs-multi-repo","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/","title":{"rendered":"Monorepo vs Multi-Repo: Vantagens e Desvantagens das Estrat\u00e9gias de Reposit\u00f3rio de C\u00f3digo"},"content":{"rendered":"<p class=\"p1\">Existem duas estrat\u00e9gias principais para <a href=\"https:\/\/kinqsta.com\/pt\/precos\/\">hospedar<\/a> e gerenciar c\u00f3digo atrav\u00e9s do Git: monorepo vs multi-repo. Ambas as abordagens t\u00eam os seus pr\u00f3s e os seus contras.<\/p>\n<p class=\"p1\">Podemos usar qualquer abordagem para qualquer base de c\u00f3digo em qualquer linguagem. Voc\u00ea pode usar qualquer uma destas estrat\u00e9gias para projetos que contenham um punhado de <a href=\"https:\/\/kinqsta.com\/pt\/blog\/bibliotecas-javascript\/\">bibliotecas<\/a> para milhares delas. Mesmo se envolver alguns membros da equipe ou centenas, ou se voc\u00ea quiser hospedar c\u00f3digo privado ou de c\u00f3digo aberto, voc\u00ea ainda pode ir com monorepo ou multi-repo com base em v\u00e1rios fatores.<\/p>\n<p class=\"p1\">Quais s\u00e3o os benef\u00edcios e inconvenientes de cada abordagem? Quando devemos usar uma ou a outra? Vamos descobrir!<\/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>O que s\u00e3o Repos?<\/h2>\n<p class=\"p1\">Um repo (abrevia\u00e7\u00e3o para reposit\u00f3rio) \u00e9 um armazenamento para todas as altera\u00e7\u00f5es e arquivos de um projeto, permitindo aos desenvolvedores &#8220;controlar a vers\u00e3o&#8221; dos ativos do projeto ao longo de sua fase de desenvolvimento.<\/p>\n<p class=\"p1\">Normalmente nos referimos aos reposit\u00f3rios <a href=\"https:\/\/kinqsta.com\/pt\/docs\/hospedagem-de-wordpress\/gerenciamento-de-site\/git\/\">Git<\/a> (como fornecidos pelo <a href=\"https:\/\/kinqsta.com\/pt\/blog\/git-vs-github\/\">GitHub<\/a>, <a href=\"https:\/\/kinqsta.com\/pt\/blog\/gitlab-vs-github\/\">GitLab<\/a> ou <a href=\"https:\/\/kinqsta.com\/pt\/blog\/bitbucket-vs-github\/\">Bitbucket<\/a>), mas o conceito tamb\u00e9m se aplica a outros sistemas de controle de vers\u00e3o (como o Mercurial).<\/p>\n\n<h2>O que \u00e9 Monorepo?<\/h2>\n<p class=\"p1\">A abordagem monorepo utiliza um \u00fanico <a href=\"https:\/\/kinqsta.com\/pt\/blog\/bitbucket-vs-github\/\">reposit\u00f3rio<\/a> para hospedar todo o c\u00f3digo das m\u00faltiplas bibliotecas ou servi\u00e7os que comp\u00f5em os projetos de uma empresa. No seu extremo, toda a base de c\u00f3digo de uma empresa &#8211; abrangendo v\u00e1rios projetos e codificados em diferentes linguagens &#8211; \u00e9 hospedada em um \u00fanico reposit\u00f3rio.<\/p>\n<h2>Benef\u00edcios do Monorepo<\/h2>\n<p class=\"p1\">Hospedar toda a base de c\u00f3digo em um \u00fanico reposit\u00f3rio oferece os seguintes benef\u00edcios.<\/p>\n<h3>Barreiras de entrada mais baixas<\/h3>\n<p class=\"p1\">Quando os novos funcion\u00e1rios come\u00e7am a trabalhar para uma empresa, eles precisam baixar o c\u00f3digo e instalar as ferramentas necess\u00e1rias para come\u00e7ar a trabalhar em suas tarefas. Suponha que o projeto esteja disperso por muitos reposit\u00f3rios, cada um tendo suas instru\u00e7\u00f5es de instala\u00e7\u00e3o e ferramentas necess\u00e1rias. Nesse caso, a instala\u00e7\u00e3o inicial ser\u00e1 complexa e, na maioria das vezes, a documenta\u00e7\u00e3o n\u00e3o estar\u00e1 completa, exigindo que esses novos membros da equipe procurem os colegas para obter ajuda.<\/p>\n<p class=\"p1\">Um monorepo simplifica as coisas. Como h\u00e1 um \u00fanico local contendo todo o c\u00f3digo e <a href=\"https:\/\/kinqsta.com\/pt\/docs\/devkinsta\/\">documenta\u00e7\u00e3o<\/a>, voc\u00ea pode agilizar a configura\u00e7\u00e3o inicial.<\/p>\n<h3>Gest\u00e3o de c\u00f3digos de localiza\u00e7\u00e3o central<\/h3>\n<p class=\"p1\">Ter um \u00fanico reposit\u00f3rio d\u00e1 visibilidade de todo o c\u00f3digo a todos os desenvolvedores. Ele simplifica o gerenciamento do c\u00f3digo, uma vez que podemos usar um \u00fanico rastreador de problemas para observar todos os problemas ao longo do ciclo de vida do aplicaivo.<\/p>\n<p class=\"p1\">Por exemplo, estas caracter\u00edsticas s\u00e3o valiosas quando um problema abrange duas (ou mais) bibliotecas infantis com o bug existente na biblioteca dependente. Com v\u00e1rios reposit\u00f3rios, pode ser um desafio <a href=\"https:\/\/kinqsta.com\/pt\/blog\/ferramenta-inspecionar\/\">encontrar o peda\u00e7o de c\u00f3digo<\/a> onde o problema acontece.<\/p>\n<p class=\"p1\">Al\u00e9m disso, precisar\u00edamos descobrir qual reposit\u00f3rio usar para criar o problema e, em seguida, convidar e cruzar os membros de outras equipes para ajudar a resolver o problema.<\/p>\n<p class=\"p1\">Com um monorepo, por\u00e9m, tanto a localiza\u00e7\u00e3o de problemas de c\u00f3digo como a colabora\u00e7\u00e3o para solucionar problemas tornam-se mais simples de alcan\u00e7ar.<\/p>\n<h3>Refatora\u00e7\u00f5es para aplicativo sem dor<\/h3>\n<p class=\"p1\">Ao criar uma refatora\u00e7\u00e3o do c\u00f3digo em toda o aplicaivo, v\u00e1rias bibliotecas ser\u00e3o afetadas. Se voc\u00ea estiver hospedando-as atrav\u00e9s de m\u00faltiplos reposit\u00f3rios, gerenciar todos os diferentes pedidos pull para mant\u00ea-las sincronizadas umas com as outras pode se revelar um desafio.<\/p>\n<p class=\"p1\">Um monorepo facilita a realiza\u00e7\u00e3o de todas as modifica\u00e7\u00f5es em todos os c\u00f3digos para todas as bibliotecas e o envio sob um \u00fanico pedido de puxar.<\/p>\n<h3>Funcionalidade adjacente mais dif\u00edcil de ser quebrada<\/h3>\n<p class=\"p1\">Com o monorepo, podemos configurar todos os testes para que todas as bibliotecas funcionem sempre que uma \u00fanica biblioteca for modificada. Como resultado, a probabilidade de fazer uma altera\u00e7\u00e3o em algumas bibliotecas minimizou os efeitos adversos em outras bibliotecas.<\/p>\n<h3>As equipes compartilham uma cultura de desenvolvimento<\/h3>\n<p class=\"p1\">Ainda que n\u00e3o imposs\u00edvel, com uma abordagem monorepo, torna-se um desafio inspirar subculturas \u00fanicas entre diferentes equipes. Uma vez que partilhar\u00e3o o mesmo reposit\u00f3rio, muito provavelmente partilhar\u00e3o as mesmas metodologias de <a href=\"https:\/\/kinqsta.com\/pt\/blog\/melhor-linguagem-de-programacao\/\">programa\u00e7\u00e3o<\/a> e gest\u00e3o e utilizar\u00e3o as mesmas <a href=\"https:\/\/kinqsta.com\/pt\/blog\/apm-ferramentas\/\">ferramentas de desenvolvimento<\/a>.<\/p>\n<h2>Problemas com a Abordagem Monorepo<\/h2>\n<p class=\"p1\">Usar um \u00fanico reposit\u00f3rio para todos os nossos c\u00f3digos tem v\u00e1rios inconvenientes.<\/p>\n<h3>Ciclos de desenvolvimento mais lentos<\/h3>\n<p class=\"p1\">Quando o c\u00f3digo de uma biblioteca cont\u00e9m altera\u00e7\u00f5es de quebra, que fazem com que os testes para bibliotecas dependentes falhem, o c\u00f3digo tamb\u00e9m deve ser corrigido antes de fundir as altera\u00e7\u00f5es.<\/p>\n<p class=\"p1\">Se essas bibliotecas dependem de outras equipes, que est\u00e3o ocupadas trabalhando em alguma outra tarefa e n\u00e3o conseguem (ou n\u00e3o querem) adaptar seu c\u00f3digo para evitar as mudan\u00e7as de quebra e ter os testes aprovados, o desenvolvimento da nova funcionalidade pode parar.<\/p>\n<p class=\"p1\">Al\u00e9m disso, o projeto pode muito bem come\u00e7ar a avan\u00e7ar apenas com a velocidade da equipe mais lenta da empresa. Esse resultado pode frustrar os membros das equipes mais r\u00e1pidas, criando condi\u00e7\u00f5es para que eles queiram deixar a empresa.<\/p>\n<p class=\"p1\">Al\u00e9m disso, uma biblioteca precisar\u00e1 executar os testes para todas as outras bibliotecas tamb\u00e9m. Quanto <a href=\"https:\/\/kinqsta.com\/pt\/blog\/teste-de-velocidade-do-seu-site\/\">mais testes forem feitos<\/a>, mais tempo leva para execut\u00e1-los, diminuindo a velocidade com que podemos iterar o nosso c\u00f3digo.<\/p>\n<h3>Requer download do codebase completo<\/h3>\n<p class=\"p1\">Quando o monorepo cont\u00e9m todo o c\u00f3digo de uma empresa, ele pode ser enorme, contendo gigabytes de dados. Para contribuir com qualquer biblioteca hospedada dentro, qualquer pessoa precisaria de um download de todo o reposit\u00f3rio.<\/p>\n<p class=\"p1\">Lidar com uma vasta base de c\u00f3digo implica um mau uso do espa\u00e7o nos nossos discos r\u00edgidos e uma interac\u00e7\u00e3o mais lenta com ele. Por exemplo, a\u00e7\u00f5es cotidianas como executar o <code>git status<\/code> ou procurar na base de c\u00f3digo com um regex podem levar muitos segundos ou at\u00e9 minutos mais do que levariam com m\u00faltiplos reposit\u00f3rios.<\/p>\n<h3>Bibliotecas n\u00e3o modificadas podem ser rec\u00e9m-criadas<\/h3>\n<p class=\"p1\">Quando <a href=\"https:\/\/kinqsta.com\/pt\/blog\/wordpress-tags\/\">etiquetamos<\/a> o monorepo, todo o c\u00f3digo dentro dele \u00e9 atribu\u00eddo \u00e0 nova etiqueta. Se esta a\u00e7\u00e3o desencadear um novo lan\u00e7amento, ent\u00e3o todas as bibliotecas hospedadas no reposit\u00f3rio ser\u00e3o lan\u00e7adas novamente com o n\u00famero da vers\u00e3o da tag, mesmo que muitas dessas bibliotecas possam n\u00e3o ter tido nenhuma altera\u00e7\u00e3o.<\/p>\n<h3>O forking \u00e9 mais dif\u00edcil<\/h3>\n<p class=\"p1\">Os projetos de c\u00f3digo aberto devem facilitar ao m\u00e1ximo o envolvimento dos colaboradores. Com v\u00e1rios reposit\u00f3rios, os contribuidores podem ir diretamente para o reposit\u00f3rio espec\u00edfico do projeto para o qual eles querem contribuir. Com um monorepo hospedando v\u00e1rios projetos, no entanto, os contribuidores devem primeiro navegar para o projeto certo e ter\u00e3o que entender como sua contribui\u00e7\u00e3o pode afetar todos os outros projetos.<\/p>\n<h2>O que \u00e9 o Multi-Repo?<\/h2>\n<p class=\"p1\">A abordagem multi-repo utiliza v\u00e1rios reposit\u00f3rios para hospedar as m\u00faltiplas bibliotecas ou servi\u00e7os de um projeto desenvolvido por uma empresa. No seu extremo, ele ir\u00e1 hospedar cada conjunto m\u00ednimo de c\u00f3digo reutiliz\u00e1vel ou funcionalidade aut\u00f4noma (como um microservi\u00e7o) sob seu reposit\u00f3rio.<\/p>\n<h2>Benef\u00edcios do Multi-Repo<\/h2>\n<p class=\"p1\">Hospedar cada biblioteca independentemente de todas as outras proporciona uma infinidade de benef\u00edcios.<\/p>\n<h3>Vers\u00e3o de biblioteca independente<\/h3>\n<p class=\"p1\">Ao etiquetar um reposit\u00f3rio, toda a sua base de c\u00f3digos \u00e9 atribu\u00edda \u00e0 etiqueta &#8220;novo&#8221;. Como apenas o c\u00f3digo de uma biblioteca espec\u00edfica est\u00e1 no reposit\u00f3rio, a biblioteca pode ser etiquetada e versionada independentemente de todas as outras bibliotecas hospedadas em outro lugar.<\/p>\n<p class=\"p1\">Ter uma vers\u00e3o independente para cada biblioteca ajuda a definir a \u00e1rvore de depend\u00eancias do aplicaivo, permitindo-nos configurar qual a vers\u00e3o de cada biblioteca a utilizar.<\/p>\n<h3>Lan\u00e7amentos de servi\u00e7os independentes<\/h3>\n<p class=\"p1\">Como o reposit\u00f3rio cont\u00e9m apenas o c\u00f3digo para algum servi\u00e7o e nada mais, ele pode ter seu pr\u00f3prio ciclo de implanta\u00e7\u00e3o, independentemente de qualquer progresso feito nas aplica\u00e7\u00f5es que o acessam.<\/p>\n<p class=\"p1\">O servi\u00e7o pode usar um ciclo de libera\u00e7\u00e3o r\u00e1pida, como a entrega cont\u00ednua (onde o novo c\u00f3digo \u00e9 implantado ap\u00f3s passar todos os testes). Algumas bibliotecas que acessam o servi\u00e7o podem usar um ciclo de libera\u00e7\u00e3o mais lento, como aquelas que s\u00f3 produzem uma nova libera\u00e7\u00e3o uma vez por semana.<\/p>\n<h3>Ajuda a definir o controle de acesso em toda a organiza\u00e7\u00e3o<\/h3>\n<p class=\"p1\">Apenas os membros da equipe envolvidos no desenvolvimento de uma biblioteca precisam ser adicionados ao reposit\u00f3rio correspondente e baixar seu c\u00f3digo. Como resultado, h\u00e1 uma estrat\u00e9gia impl\u00edcita de controle de acesso para cada camada do <a href=\"https:\/\/kinqsta.com\/pt\/blog\/monitoramento-desempenho-aplicativos\/\">aplicativo<\/a>. Aos envolvidos com a biblioteca ser\u00e3o concedidos direitos de edi\u00e7\u00e3o, e todos os outros poder\u00e3o n\u00e3o ter acesso ao reposit\u00f3rio. Ou podem receber direitos de leitura, mas n\u00e3o de edi\u00e7\u00e3o.<\/p>\n<h3>Permite que as equipes trabalhem de forma aut\u00f3noma<\/h3>\n<p class=\"p1\">Os membros da equipe podem projetar a arquitetura da biblioteca e implementar seu c\u00f3digo trabalhando de forma isolada de todas as outras equipes. Eles podem tomar decis\u00f5es baseadas no que a biblioteca faz no contexto geral, sem serem afetados pelos requisitos espec\u00edficos de alguma equipe ou aplicaivo externa.<\/p>\n<h2>Problemas com a abordagem Multi-Repo<\/h2>\n<p class=\"p1\">O uso de m\u00faltiplos reposit\u00f3rios pode dar origem a v\u00e1rios problemas.<\/p>\n<h3>As bibliotecas devem ser constantemente renovadas<\/h3>\n<p class=\"p1\">Quando uma nova vers\u00e3o de uma biblioteca contendo altera\u00e7\u00f5es de quebra \u00e9 lan\u00e7ada, as bibliotecas que dependem desta biblioteca precisar\u00e3o ser adaptadas para come\u00e7ar a usar a vers\u00e3o mais recente. Se o ciclo de lan\u00e7amento da biblioteca for mais r\u00e1pido que o das bibliotecas dependentes, elas poder\u00e3o ficar rapidamente fora de sincronia entre si.<\/p>\n<p class=\"p1\">As equipes ter\u00e3o de estar constantemente em dia para utilizar os \u00faltimos lan\u00e7amentos de outras equipes. Dado que equipes diferentes t\u00eam prioridades diferentes, isto pode por vezes revelar-se dif\u00edcil de alcan\u00e7ar.<\/p>\n<p class=\"p1\">Consequentemente, uma equipe que n\u00e3o consiga recuperar o atraso pode acabar por se agarrar \u00e0 vers\u00e3o desatualizada da biblioteca dependente. Este resultado ter\u00e1 implica\u00e7\u00f5es no aplicaivo (em termos de seguran\u00e7a, velocidade e outras considera\u00e7\u00f5es), e a lacuna no desenvolvimento entre bibliotecas pode ser apenas maior.<\/p>\n<h3>Podem fragmentar as equipes<\/h3>\n<p class=\"p1\">Quando equipes diferentes n\u00e3o precisam interagir umas com as outras, elas acabam trabalhando em seus pr\u00f3prios silos. A longo prazo, isto poderia levar a equipes gerando subculturas comerciais, tais como o uso de diferentes metodologias de programa\u00e7\u00e3o ou gerenciamento, ou o uso de diferentes conjuntos de ferramentas de desenvolvimento.<\/p>\n<p class=\"p1\">Se algum membro da equipe eventualmente precisar trabalhar em uma equipe diferente, ele pode sofrer um pouco de choque cultural e aprender uma nova maneira de fazer seu trabalho.<\/p>\n<h2>Monorepo vs Multi-Repo: Principais diferen\u00e7as<\/h2>\n<p class=\"p1\">Ambas as abordagens acabam por lidar com o mesmo objetivo: gerir a base de c\u00f3digos. Assim, ambas devem resolver os mesmos desafios, incluindo a gest\u00e3o de vers\u00f5es, fomentando a <a href=\"https:\/\/kinqsta.com\/pt\/blog\/microsoft-teams-vs-slack\/\">colabora\u00e7\u00e3 o entre os membros da equipe<\/a>, tratando de problemas, realizando testes, entre outros.<\/p>\n<p class=\"p1\">A sua principal diferen\u00e7a diz respeito ao momento em que os membros da equipe tomam as suas decis\u00f5es: ou antecipadamente, para o monorepo, ou ao final da linha, para o multi-repo.<\/p>\n<p class=\"p1\">Vamos analisar esta ideia com mais detalhe.<\/p>\n<p class=\"p1\">Como todas as bibliotecas s\u00e3o versionadas independentemente no multi-reportagem, uma equipe que lan\u00e7a uma biblioteca com mudan\u00e7as de quebra pode faz\u00ea-lo com seguran\u00e7a, atribuindo um novo n\u00famero de vers\u00e3o principal ao \u00faltimo lan\u00e7amento. Outros grupos podem ter suas bibliotecas dependentes grudadas na vers\u00e3o antiga e mudar para a nova, uma vez que seu c\u00f3digo tenha sido adaptado.<\/p>\n<p class=\"p1\">Esta abordagem deixa a decis\u00e3o de quando adaptar todas as outras bibliotecas a cada equipe respons\u00e1vel, que pode fazer isso a qualquer momento. Se o fizerem demasiado tarde e forem lan\u00e7adas novas vers\u00f5es de bibliotecas, fechar a lacuna entre bibliotecas tornar-se-\u00e1 cada vez mais dif\u00edcil.<\/p>\n<p class=\"p1\">Consequentemente, enquanto uma equipe pode iterar rapidamente e frequentemente no seu c\u00f3digo, outras equipes podem revelar-se incapazes de recuperar o atraso, acabando por produzir bibliotecas que divergem.<\/p>\n<p class=\"p1\">Por outro lado, em um ambiente monorepo, n\u00e3o podemos lan\u00e7ar uma nova vers\u00e3o de uma biblioteca que quebra alguma outra biblioteca, uma vez que seus testes ser\u00e3o reprovados. Neste caso, a primeira equipe deve comunicar com a segunda equipe para incorporar as altera\u00e7\u00f5es.<\/p>\n<p class=\"p1\">Esta abordagem for\u00e7a as equipes a adaptar <a href=\"https:\/\/kinqsta.com\/pt\/blog\/bibliotecas-javascript\/\">todas as bibliotecas no<\/a> seu conjunto sempre que uma mudan\u00e7a para uma \u00fanica biblioteca tem de acontecer. Todas as equipes s\u00e3o for\u00e7adas a falar umas com as outras e a chegar a uma solu\u00e7\u00e3o em conjunto.<\/p>\n<p class=\"p1\">Como resultado, a primeira equipe n\u00e3o ser\u00e1 capaz de iterar t\u00e3o r\u00e1pido quanto deseja, mas o c\u00f3digo entre diferentes bibliotecas n\u00e3o come\u00e7ar\u00e1 a divergir em nenhum momento.<\/p>\n<p class=\"p1\">Em resumo, a abordagem multi-repo pode ajudar a criar uma cultura de &#8220;avan\u00e7ar r\u00e1pido e quebrar coisas&#8221; entre as equipes, onde equipes \u00e1geis e independentes podem produzir a sua produ\u00e7\u00e3o \u00e0 sua velocidade. Em vez disso, a abordagem monorepo favorece uma cultura de consci\u00eancia e cuidado, onde as equipes n\u00e3o devem ser deixadas para tr\u00e1s para lidar com um problema sozinhas.<\/p>\n<h2>Abordagem h\u00edbrida Poly-As-Mono<\/h2>\n<p class=\"p1\">Se n\u00e3o podemos decidir se usamos as abordagens multi-repo ou monorepo, h\u00e1 tamb\u00e9m a abordagem intermedi\u00e1ria: usar m\u00faltiplos reposit\u00f3rios e empregar alguma ferramenta para mant\u00ea-los sincronizados, tornando-o parecido com um monorepo, mas com mais flexibilidade.<\/p>\n<p class=\"p1\"><a href=\"https:\/\/github.com\/mateodelnorte\/meta\">Meta<\/a> \u00e9 uma dessas ferramentas. Ele organiza m\u00faltiplos reposit\u00f3rios sob subdiret\u00f3rios e fornece uma <a href=\"https:\/\/kinqsta.com\/pt\/blog\/usar-ssh\/\">interface de linha de comando<\/a> que executa o mesmo comando em todos eles simultaneamente.<\/p>\n<p class=\"p1\">Um meta-reposit\u00f3rio cont\u00e9m as informa\u00e7\u00f5es sobre os reposit\u00f3rios que comp\u00f5em um projeto. Clonando esse reposit\u00f3rio via meta, todos os reposit\u00f3rios necess\u00e1rios ser\u00e3o clonados recursivamente, facilitando aos novos membros da equipe a come\u00e7ar a trabalhar em seus projetos imediatamente.<\/p>\n<p class=\"p1\">Para clonar um meta-reposit\u00f3rio e todos os seus m\u00faltiplos reposit\u00f3rios definidos, devemos executar o seguinte:<\/p>\n<pre><code class=\"language-bash\">meta git clone [meta repo url]\n<\/code><\/pre>\n<p class=\"p1\">Meta ir\u00e1 executar um <code>git clone<\/code>\u00a0para cada reposit\u00f3rio e coloc\u00e1-lo em uma subpasta:<\/p>\n<figure id=\"attachment_100243\" aria-describedby=\"caption-attachment-100243\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2021\/07\/meta-cloning.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-100243 size-large\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2021\/07\/meta-cloning-1024x755.png\" alt=\"Clonando um meta-projecto. \" width=\"1024\" height=\"755\"><\/a><figcaption id=\"caption-attachment-100243\" class=\"wp-caption-text\">Clonando um meta-projecto. (Fonte da imagem: <a href=\"https:\/\/github.com\/mateodelnorte\/meta\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/mateodelnorte\/meta<\/a>)<\/figcaption><\/figure>\n<p class=\"p1\">A partir da\u00ed, a execu\u00e7\u00e3o do comando de <code>meta exec<\/code> executar\u00e1 o comando em cada subpasta. Por exemplo, executar o\u00a0<code>git checkout master<\/code> em cada reposit\u00f3rio \u00e9 feito desta forma:<\/p>\n<pre><code class=\"language-bash\">meta exec \"git checkout master\"\n<\/code><\/pre>\n<h2>Abordagem h\u00edbrida Mono-As-Poly<\/h2>\n<p class=\"p1\">Outra abordagem \u00e9 gerenciar o c\u00f3digo atrav\u00e9s de um monorepo para desenvolvimento, mas copiando o c\u00f3digo de cada biblioteca em seu reposit\u00f3rio independente para implanta\u00e7\u00e3o.<\/p>\n<p class=\"p1\">Esta estrat\u00e9gia \u00e9 predominante dentro do ecossistema PHP porque o <a href=\"https:\/\/packagist.org\/\">Packagist<\/a> (o reposit\u00f3rio principal do <a href=\"https:\/\/getcomposer.org\/\">Composer<\/a>) requer uma <a href=\"https:\/\/kinqsta.com\/pt\/blog\/o-que-e-uma-url\/\">URL <\/a>de reposit\u00f3rio p\u00fablico para publicar um pacote, e n\u00e3o \u00e9 poss\u00edvel indicar que o pacote est\u00e1 localizado dentro de um subdiret\u00f3rio do reposit\u00f3rio.<\/p>\n<p class=\"p1\">Dada a limita\u00e7\u00e3o do Packagist, os <a href=\"https:\/\/graphql-api.com\/blog\/extending-the-monorepo-builder\/\">projetos PHP ainda podem usar um monorepo para desenvolvimento<\/a>, mas eles devem usar a abordagem multi-repo para implanta\u00e7\u00e3o.<\/p>\n<p class=\"p1\">Para conseguir esta convers\u00e3o, podemos <a href=\"https:\/\/stackoverflow.com\/questions\/359424\/detach-move-subdirectory-into-separate-git-repository\/17864475#17864475\">executar um script com<\/a><a href=\"https:\/\/stackoverflow.com\/questions\/359424\/detach-move-subdirectory-into-separate-git-repository\/17864475#17864475\"> <code>git subtree split<\/code><\/a> Ou usar uma das ferramentas dispon\u00edveis que executam a mesma l\u00f3gica:<\/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\">A\u00e7\u00e3o GitHub para o Monorepo Split<\/a><\/li>\n<\/ul>\n<h2>Quem est\u00e1 usando Monorepo vs Multi-Repo<\/h2>\n<p class=\"p1\">V\u00e1rias grandes empresas de tecnologia favorecem a abordagem monorepo, enquanto outras decidiram usar o m\u00e9todo 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> t\u00eam todos garantido publicamente a abordagem monorepo. A Microsoft <a href=\"https:\/\/devblogs.microsoft.com\/bharry\/the-largest-git-repo-on-the-planet\/\">executa o maior monorepo Git do planeta<\/a> para hospedar o c\u00f3digo fonte do sistema operacional Windows.<\/p>\n<p class=\"p1\">No lado oposto, <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> s\u00e3o empresas famosas que utilizam a abordagem multi-repo.<\/p>\n<p class=\"p1\">No lado h\u00edbrido poly-as-mono, o <a href=\"https:\/\/source.android.com\/setup\/create\/coding-tasks\">Android<\/a> atualiza m\u00faltiplos reposit\u00f3rios, que s\u00e3o geridos como um monorepo.<\/p>\n<p class=\"p1\">No lado h\u00edbrido mono-as-poly, <a href=\"https:\/\/kinqsta.com\/pt\/blog\/frameworks-php-populares\/#symfony\">Symfony<\/a> mant\u00e9m o c\u00f3digo para todos os seus componentes em um monorepo. Eles o dividem em reposit\u00f3rios independentes para implanta\u00e7\u00e3o (como <a style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\" href=\"https:\/\/github.com\/symfony\/dependency-injection\"><code>symfony\/dependency-injection<\/code><\/a> e\u00a0<a style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\" href=\"https:\/\/github.com\/symfony\/event-dispatcher\"><code>symfony\/event-dispatcher<\/code><\/a>.)<\/p>\n<h2>Exemplos de Monorepo e Multi-Repo<\/h2>\n<p class=\"p1\">A <a href=\"https:\/\/github.com\/WordPress\/WordPress\">conta WordPress no GitHub<\/a> hospeda exemplos de abordagens monorepo e multi-repo.<\/p>\n<p class=\"p1\"><a href=\"https:\/\/kinqsta.com\/pt\/blog\/editor-gutenberg-wordpress\/\">O Gutenberg<\/a>, o editor de blocos do WordPress, \u00e9 composto por v\u00e1rias dezenas de pacotes <a href=\"https:\/\/kinqsta.com\/pt\/blog\/o-que-e-javascript\/\">JavaScript<\/a>. Estes pacotes est\u00e3o todos hospedados no <a href=\"https:\/\/github.com\/WordPress\/gutenberg\"><code>WordPress\/gutenberg<\/code>monorepo<\/a> e geridos atrav\u00e9s do <a href=\"https:\/\/github.com\/lerna\/lerna\">Lerna<\/a> para os ajudar a public\u00e1-los no reposit\u00f3rio <a href=\"https:\/\/kinqsta.com\/pt\/blog\/o-que-e-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>, o mecanismo de pesquisa de m\u00eddia abertamente licenciado, <a href=\"https:\/\/github.com\/WordPress\/openverse\/blob\/918b7cf1b6323291ab16c1ad5a27f3733709ec17\/README.md#openverse\">hospeda suas principais partes<\/a> em reposit\u00f3rios independentes: <a href=\"https:\/\/github.com\/wordpress\/openverse-frontend\">Front-end<\/a>, <a href=\"https:\/\/github.com\/wordpress\/openverse-catalog\">Cat\u00e1logo<\/a>, e <a href=\"https:\/\/github.com\/wordpress\/openverse-api\">API<\/a>.<\/p>\n<h2>Monorepo vs Multi-Repo: Como escolher?<\/h2>\n<p class=\"p1\">Como acontece com muitos problemas de desenvolvimento, n\u00e3o h\u00e1 uma resposta pr\u00e9-definida sobre qual abordagem voc\u00ea deve usar. Diferentes empresas e projectos ir\u00e3o beneficiar de uma estrat\u00e9gia ou de outra com base nas suas condi\u00e7\u00f5es \u00fanicas, como por exemplo:<\/p>\n<ul>\n<li class=\"li1\">Qual \u00e9 o tamanho da base de c\u00f3digo? Ela cont\u00e9m gigabytes de dados?<\/li>\n<li class=\"li1\">Quantas pessoas v\u00e3o trabalhar na base de c\u00f3digo? S\u00e3o cerca de 10, 100, ou 1.000?<\/li>\n<li class=\"li1\">Quantos pacotes haver\u00e1? S\u00e3o cerca de 10, 100, ou 1.000?<\/li>\n<li class=\"li1\">Quantos pacotes a equipe precisa trabalhar em um determinado momento?<\/li>\n<li class=\"li1\">Qu\u00e3o apertados s\u00e3o os pacotes?<\/li>\n<li class=\"li1\">Est\u00e3o envolvidas diferentes linguagens de programa\u00e7\u00e3o? Requerem um <a href=\"https:\/\/kinqsta.com\/pt\/blog\/softwares-cms\/\">software<\/a> espec\u00edfico instalado ou hardware especial para funcionar?<\/li>\n<li class=\"li1\">Quantas ferramentas de implanta\u00e7\u00e3o s\u00e3o necess\u00e1rias, e qual a complexidade da sua instala\u00e7\u00e3o?<\/li>\n<li class=\"li1\">Qual \u00e9 a cultura da empresa? As equipes s\u00e3o encorajadas a colaborar?<\/li>\n<li class=\"li1\">Que <a href=\"https:\/\/kinqsta.com\/pt\/blog\/ferramentas-de-desenvolvimento-web\/\">ferramentas e tecnologias<\/a> as equipes sabem utilizar?<\/li>\n<\/ul>\n\n<h2>Resumo<\/h2>\n<p class=\"p1\">H\u00e1 duas estrat\u00e9gias principais para hospedar e gerenciar c\u00f3digo: monorepo vs multi-repo. A abordagem monorepo implica armazenar o c\u00f3digo para diferentes bibliotecas ou projetos &#8211; e mesmo todo o c\u00f3digo de uma empresa &#8211; em um \u00fanico reposit\u00f3rio. E o sistema multi-repo divide o c\u00f3digo em unidades, tais como bibliotecas ou servi\u00e7os, e mant\u00e9m o seu c\u00f3digo hospedado em reposit\u00f3rios independentes.<\/p>\n<p class=\"p1\">Qual a abordagem a utilizar depende de uma multiplicidade de condi\u00e7\u00f5es. Ambas as estrat\u00e9gias t\u00eam v\u00e1rias vantagens e desvantagens, e n\u00f3s acabamos de cobrir todas elas em detalhe neste artigo.<\/p>\n<p class=\"p1\"><em>Ainda tem perguntas sobre monorepos ou multi-repos? Escreva-nos na se\u00e7\u00e3o de coment\u00e1rios!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Existem duas estrat\u00e9gias principais para hospedar e gerenciar c\u00f3digo atrav\u00e9s do Git: monorepo vs multi-repo. Ambas as abordagens t\u00eam os seus pr\u00f3s e os seus contras. &#8230;<\/p>\n","protected":false},"author":196,"featured_media":43996,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[123,464],"topic":[1010],"class_list":["post-43993","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-git","tag-github","topic-dicas-de-tecnologia"],"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: Vantagens e Desvantagens das Estrat\u00e9gias de Reposit\u00f3rio de C\u00f3digo<\/title>\n<meta name=\"description\" content=\"Monorepo vs multi-repo - qual \u00e9 o melhor? H\u00e1 pr\u00f3s e contras para cada um. Aprenda aqui sobre os benef\u00edcios e desvantagens de cada abordagem.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Monorepo vs Multi-Repo: Vantagens e Desvantagens das Estrat\u00e9gias de Reposit\u00f3rio de C\u00f3digo\" \/>\n<meta property=\"og:description\" content=\"Monorepo vs multi-repo - qual \u00e9 o melhor? H\u00e1 pr\u00f3s e contras para cada um. Aprenda aqui sobre os benef\u00edcios e desvantagens de cada abordagem.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-08-30T07:26:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-07T14:16:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/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 \u00e9 o melhor? H\u00e1 pr\u00f3s e contras para cada um. Aprenda aqui sobre os benef\u00edcios e desvantagens de cada abordagem.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/08\/monorepo-vs-multi-repo.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@losoviz\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Leonardo Losoviz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/\"},\"author\":{\"name\":\"Leonardo Losoviz\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238\"},\"headline\":\"Monorepo vs Multi-Repo: Vantagens e Desvantagens das Estrat\u00e9gias de Reposit\u00f3rio de C\u00f3digo\",\"datePublished\":\"2021-08-30T07:26:23+00:00\",\"dateModified\":\"2025-02-07T14:16:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/\"},\"wordCount\":3173,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/08\/monorepo-vs-multi-repo.jpeg\",\"keywords\":[\"git\",\"GitHub\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/\",\"name\":\"Monorepo vs Multi-Repo: Vantagens e Desvantagens das Estrat\u00e9gias de Reposit\u00f3rio de C\u00f3digo\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/08\/monorepo-vs-multi-repo.jpeg\",\"datePublished\":\"2021-08-30T07:26:23+00:00\",\"dateModified\":\"2025-02-07T14:16:08+00:00\",\"description\":\"Monorepo vs multi-repo - qual \u00e9 o melhor? H\u00e1 pr\u00f3s e contras para cada um. Aprenda aqui sobre os benef\u00edcios e desvantagens de cada abordagem.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/08\/monorepo-vs-multi-repo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/08\/monorepo-vs-multi-repo.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Monorepo vs Multi-Repo: Pr\u00f3s e Contras das Estrat\u00e9gias Reposit\u00f3rias de C\u00f3digo\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dicas de Tecnologia\",\"item\":\"https:\/\/kinqsta.com\/pt\/topicos\/dicas-de-tecnologia\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Monorepo vs Multi-Repo: Vantagens e Desvantagens das Estrat\u00e9gias de Reposit\u00f3rio de C\u00f3digo\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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:\/\/kinqsta.com\/pt\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238\",\"name\":\"Leonardo Losoviz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/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:\/\/kinqsta.com\/pt\/blog\/author\/leonardolosoviz\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Monorepo vs Multi-Repo: Vantagens e Desvantagens das Estrat\u00e9gias de Reposit\u00f3rio de C\u00f3digo","description":"Monorepo vs multi-repo - qual \u00e9 o melhor? H\u00e1 pr\u00f3s e contras para cada um. Aprenda aqui sobre os benef\u00edcios e desvantagens de cada abordagem.","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:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/","og_locale":"pt_PT","og_type":"article","og_title":"Monorepo vs Multi-Repo: Vantagens e Desvantagens das Estrat\u00e9gias de Reposit\u00f3rio de C\u00f3digo","og_description":"Monorepo vs multi-repo - qual \u00e9 o melhor? H\u00e1 pr\u00f3s e contras para cada um. Aprenda aqui sobre os benef\u00edcios e desvantagens de cada abordagem.","og_url":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2021-08-30T07:26:23+00:00","article_modified_time":"2025-02-07T14:16:08+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/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 \u00e9 o melhor? H\u00e1 pr\u00f3s e contras para cada um. Aprenda aqui sobre os benef\u00edcios e desvantagens de cada abordagem.","twitter_image":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/08\/monorepo-vs-multi-repo.jpeg","twitter_creator":"@losoviz","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Leonardo Losoviz","Tempo estimado de leitura":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/"},"author":{"name":"Leonardo Losoviz","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238"},"headline":"Monorepo vs Multi-Repo: Vantagens e Desvantagens das Estrat\u00e9gias de Reposit\u00f3rio de C\u00f3digo","datePublished":"2021-08-30T07:26:23+00:00","dateModified":"2025-02-07T14:16:08+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/"},"wordCount":3173,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/08\/monorepo-vs-multi-repo.jpeg","keywords":["git","GitHub"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/","url":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/","name":"Monorepo vs Multi-Repo: Vantagens e Desvantagens das Estrat\u00e9gias de Reposit\u00f3rio de C\u00f3digo","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/08\/monorepo-vs-multi-repo.jpeg","datePublished":"2021-08-30T07:26:23+00:00","dateModified":"2025-02-07T14:16:08+00:00","description":"Monorepo vs multi-repo - qual \u00e9 o melhor? H\u00e1 pr\u00f3s e contras para cada um. Aprenda aqui sobre os benef\u00edcios e desvantagens de cada abordagem.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#primaryimage","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/08\/monorepo-vs-multi-repo.jpeg","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/08\/monorepo-vs-multi-repo.jpeg","width":1460,"height":730,"caption":"Monorepo vs Multi-Repo: Pr\u00f3s e Contras das Estrat\u00e9gias Reposit\u00f3rias de C\u00f3digo"},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/pt\/blog\/monorepo-vs-multi-repo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Dicas de Tecnologia","item":"https:\/\/kinqsta.com\/pt\/topicos\/dicas-de-tecnologia\/"},{"@type":"ListItem","position":3,"name":"Monorepo vs Multi-Repo: Vantagens e Desvantagens das Estrat\u00e9gias de Reposit\u00f3rio de C\u00f3digo"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/pt\/#website","url":"https:\/\/kinqsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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:\/\/kinqsta.com\/pt\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238","name":"Leonardo Losoviz","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/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:\/\/kinqsta.com\/pt\/blog\/author\/leonardolosoviz\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/43993","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/users\/196"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/comments?post=43993"}],"version-history":[{"count":9,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/43993\/revisions"}],"predecessor-version":[{"id":63122,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/43993\/revisions\/63122"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43993\/translations\/en"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43993\/translations\/de"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43993\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43993\/translations\/it"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43993\/translations\/es"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43993\/translations\/pt"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43993\/translations\/nl"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43993\/translations\/se"},{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/43993\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media\/43996"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media?parent=43993"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/tags?post=43993"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/topic?post=43993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}