{"id":34744,"date":"2019-10-31T22:00:10","date_gmt":"2019-10-31T19:00:10","guid":{"rendered":"https:\/\/prohoster.info\/blog\/monorepozitorii-pozhalujsta-nado\/"},"modified":"2019-10-31T22:00:10","modified_gmt":"2019-10-31T19:00:10","slug":"monorepozitorii-pozhalujsta-nado","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","title":{"rendered":"Monorepositories : s'il vous pla\u00eet, c'est n\u00e9cessaire","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Monorepositories : s&#039;il vous pla\u00eet, c&#039;est n\u00e9cessaire\" src=\"\/wp-content\/uploads\/2019\/05\/a973a60a06e7b336c08db26fa6d72149.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>La traduction de l'article est pr\u00e9par\u00e9e pour les \u00e9tudiants du cours <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/g5Rz\/\">\u00ab Pratiques et outils DevOps \u00bb<\/a><\/noindex> dans le projet \u00e9ducatif OTUS.<\/em><\/p>\n<p>Vous devez opter pour un monorepo, car le comportement qu'il favorise au sein de vos \u00e9quipes est la transparence et la responsabilit\u00e9 collective, surtout lorsqu'il s'agit de l'expansion des \u00e9quipes. Quoi qu'il en soit, vous devrez investir dans des outils, mais il est toujours pr\u00e9f\u00e9rable que le comportement par d\u00e9faut soit celui que vous souhaitez voir dans vos \u00e9quipes. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h1 id=\"pochemu-my-govorim-ob-etom\">Pourquoi en parlons-nous ?<\/h1>\n<p><\/p>\n<p>Matt Klein a \u00e9crit un article <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@mattklein123\/monorepos-please-dont-e9a279be011b\">\u00ab Monorepos : S'il vous pla\u00eet, ne le faites pas ! \u00bb<\/a><\/noindex>\u200a (note du traducteur : traduction sur Habr\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/435306\/\">\u00ab Monorepositories: please don\u2019t \u00bb<\/a><\/noindex>). J'aime Matt, je pense qu'il est tr\u00e8s intelligent, et vous devriez lire son point de vue. Il a d'abord publi\u00e9 un sondage sur Twitter :<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Monorepositories : s&#039;il vous pla\u00eet, c&#039;est n\u00e9cessaire\" src=\"\/wp-content\/uploads\/2019\/05\/edbc65b80288045e08394821c17a77a9.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Traduction :<\/em><br \/>\n<em>En ce jour de nouvel an, je vais d\u00e9battre sur l'absurdit\u00e9 des monorepos. L'ann\u00e9e 2019 a commenc\u00e9 discr\u00e8tement. Dans cet esprit, je vous propose un sondage. Qui sont les grands fanatiques ? Les partisans :<\/em><br \/>\n\u2014 <em>Monorepo<\/em><br \/>\n\u2014 <em>Rust<\/em><br \/>\n\u2014 <em>Sondage incorrect \/ les deux<\/em><\/p>\n<p><\/p>\n<p>Ma r\u00e9ponse \u00e9tait : \u00ab Je suis litt\u00e9ralement ces deux personnes \u00bb. Au lieu de discuter de la fa\u00e7on dont Rust est une drogue, voyons pourquoi je pense qu'il a tort au sujet des monorepos. Un peu sur moi. Je suis directeur technique de Chef Software. Nous avons environ 100 ing\u00e9nieurs, une base de code de pr\u00e8s de 11 \u00e0 12 ans et 4 produits principaux. Une partie de ce code se trouve dans un polyrepo (ma position de d\u00e9part), et une autre dans un monorepo (ma position actuelle).<\/p>\n<p><\/p>\n<p>Avant de commencer : chaque argument que j'expose ici sera applicable aux d\u00e9p\u00f4ts des deux types. \u00c0 mon avis, il n'y a pas de raisons techniques qui justifient le choix de l'un ou l'autre type de d\u00e9p\u00f4t. Vous pouvez faire fonctionner n'importe quelle approche. Je suis heureux d'en parler, mais je ne suis pas int\u00e9ress\u00e9 par des raisons techniques artificielles qui privil\u00e9gieraient l'un sur l'autre. <\/p>\n<p><\/p>\n<p>Je suis d'accord avec la premi\u00e8re partie du point de vue de Matt :<\/p>\n<p><\/p>\n<p><em>Parce qu'\u00e0 grande \u00e9chelle, un monorepo r\u00e9soudra exactement les m\u00eames probl\u00e8mes qu'un polyrepo, tout en vous incitant \u00e0 avoir une forte coh\u00e9sion dans votre code et n\u00e9cessitant d'incroyables efforts pour augmenter la scalabilit\u00e9 de votre syst\u00e8me de contr\u00f4le de version.<\/em><\/p>\n<p><\/p>\n<p>Vous devrez r\u00e9soudre les m\u00eames probl\u00e8mes, que vous choisissiez un monor\u00e9pertoire ou un polyr\u00e9pertoire. Comment publiez-vous des versions ? Quelle est votre approche des mises \u00e0 jour ? La compatibilit\u00e9 descendante ? Les d\u00e9pendances crois\u00e9es des projets ? Quels styles architecturaux sont acceptables ? Comment g\u00e9rez-vous votre infrastructure de construction et de test ? La liste est infinie. Et vous les r\u00e9soudrez toutes au fur et \u00e0 mesure de votre croissance. Il n'y a pas de fromage gratuit.<\/p>\n<p><\/p>\n<p>Je pense que l'argument de Matt ressemble \u00e0 des points de vue partag\u00e9s par de nombreux ing\u00e9nieurs (et managers) que je respecte. Cela vient du point de vue d'un ing\u00e9nieur travaillant sur un composant, ou d'une \u00e9quipe travaillant sur un composant. Vous entendez des choses comme :<\/p>\n<p><\/p>\n<ul>\n<li>La base de code est encombrante - je n'ai pas besoin de tout ce g\u00e2chis.<\/li>\n<li>C'est plus difficile \u00e0 tester, car je dois v\u00e9rifier tout ce g\u00e2chis dont je n'ai pas besoin.<\/li>\n<li>C'est plus compliqu\u00e9 de travailler avec des d\u00e9pendances externes.<\/li>\n<li>J'ai besoin de mes propres syst\u00e8mes de contr\u00f4le de version virtuels.<\/li>\n<\/ul>\n<p><\/p>\n<p>Sans aucun doute, tous ces points sont valables. C'est vrai dans les deux cas - dans un polyr\u00e9pertoire, j'ai mon propre g\u00e2chis, en plus de celui n\u00e9cessaire pour la construction... Je peux aussi avoir besoin d'un autre g\u00e2chis. Donc, je cr\u00e9e \u00ab simplement \u00bb des outils qui permettent de faire le checkout de l'ensemble du projet. Ou je cr\u00e9e un faux monor\u00e9pertoire avec des sous-modules. Nous pourrions en discuter toute la journ\u00e9e. Mais je pense que l'argument de Matt omet la raison principale, pour laquelle j'ai assez fortement bascul\u00e9 en faveur du monor\u00e9pertoire :<\/p>\n<p><\/p>\n<h1 id=\"on-provociruet-obschenie-i-pokazyvaet-problemy\">Il provoque la communication et met en lumi\u00e8re les probl\u00e8mes<\/h1>\n<p><\/p>\n<p>Lorsque nous s\u00e9parons les d\u00e9p\u00f4ts, nous cr\u00e9ons de facto un probl\u00e8me de coordination et de transparence. Cela correspond \u00e0 la fa\u00e7on dont nous pensons aux \u00e9quipes (surtout \u00e0 la fa\u00e7on dont les membres per\u00e7oivent leur travail) : nous sommes responsables d'un certain composant. Nous travaillons en relative isolation. Les fronti\u00e8res sont fix\u00e9es autour de mon \u00e9quipe et du ou des composants sur lesquels nous travaillons.<\/p>\n<p><\/p>\n<p>\u00c0 mesure que l'architecture devient plus complexe, une \u00e9quipe ne peut plus la g\u00e9rer seule. Tr\u00e8s peu d'ing\u00e9nieurs peuvent garder l'ensemble du syst\u00e8me en t\u00eate. Supposons que vous g\u00e9riez un composant commun A, utilis\u00e9 par les \u00e9quipes B, C et D. L'\u00e9quipe A refactore, am\u00e9liore l'API et modifie \u00e9galement l'impl\u00e9mentation interne. En cons\u00e9quence, ces changements ne sont pas r\u00e9trocompatibles. Quel conseil donneriez-vous?<\/p>\n<p><\/p>\n<ul>\n<li>Identifier tous les endroits o\u00f9 l'ancien API est utilis\u00e9.<\/li>\n<li>Y a-t-il des cas o\u00f9 le nouvel API ne peut pas \u00eatre utilis\u00e9?<\/li>\n<li>Pouvez-vous corriger et tester d'autres composants pour vous assurer qu'ils ne seront pas cass\u00e9s?<\/li>\n<li>Ces \u00e9quipes peuvent-elles v\u00e9rifier vos modifications d\u00e8s maintenant?<\/li>\n<\/ul>\n<p><\/p>\n<p>Notez que ces questions ne d\u00e9pendent pas du type de d\u00e9p\u00f4t. Vous devrez trouver les \u00e9quipes B, C et D. Vous devrez leur parler, comprendre leur emploi du temps et leurs priorit\u00e9s. Du moins, nous esp\u00e9rons que vous le ferez.<\/p>\n<p><\/p>\n<p>En r\u00e9alit\u00e9, personne ne veut faire cela. C'est beaucoup moins excitant que de simplement corriger cet API. Tout cela est humain et compliqu\u00e9. Dans un d\u00e9p\u00f4t polyglot, vous pouvez simplement apporter des modifications, soumettre pour r\u00e9vision \u00e0 ceux qui travaillent sur ce composant (probablement pas B, C ou D) et passer \u00e0 autre chose. Pendant ce temps, les \u00e9quipes B, C et D peuvent rester sur leur version actuelle. Elles mettront \u00e0 jour une fois qu'elles auront r\u00e9alis\u00e9 votre g\u00e9nie!<\/p>\n<p><\/p>\n<p>Dans un d\u00e9p\u00f4t monorepo, la responsabilit\u00e9 passe par d\u00e9faut. L'\u00e9quipe A change son composant et, si elle n'est pas prudente, casse imm\u00e9diatement B, C et D. Cela conduit B, C et D \u00e0 frapper \u00e0 la porte de A, se demandant pourquoi l'\u00e9quipe A a cass\u00e9 la build. Cela enseigne \u00e0 A qu'elle ne peut pas ignorer ma liste ci-dessus. Elles doivent parler de ce qu'elles envisagent de faire. B, C et D peuvent-ils avancer? Que se passe-t-il si B et C peuvent, mais que D \u00e9tait \u00e9troitement li\u00e9 \u00e0 l'effet secondaire du vieux comportement de l'algorithme?<\/p>\n<p><\/p>\n<p>Nous devons ensuite parler de la mani\u00e8re dont nous allons sortir de cette situation :<\/p>\n<p><\/p>\n<ol>\n<li>Support de plusieurs API internes, l'ancien algorithme \u00e9tant marqu\u00e9 comme obsol\u00e8te jusqu'\u00e0 ce que D puisse cesser de l'utiliser.<\/li>\n<li>Support de plusieurs versions de version, une avec l'interface ancienne, une avec la nouvelle.<\/li>\n<li>Retarder le d\u00e9ploiement des modifications A jusqu'\u00e0 ce que B, C et D puissent les accepter simultan\u00e9ment.<\/li>\n<\/ol>\n<p><\/p>\n<p>Supposons que nous ayons choisi 1, plusieurs API. Dans ce cas, nous avons deux morceaux de code. Ancien et nouveau. Assez pratique dans certaines situations. Nous r\u00e9int\u00e9grons l'ancien code, le marquons comme obsol\u00e8te (deprecated) et convenons d'un calendrier pour sa suppression avec l'\u00e9quipe D. Essentiellement identique pour le poly et le mono d\u00e9p\u00f4t.<\/p>\n<p><\/p>\n<p>Pour la sortie de plusieurs versions, nous avons besoin d'une branche. Maintenant, nous avons deux composants \u2014 A1 et A2. Les \u00e9quipes B et C utilisent A2, tandis que D utilise A1. Nous devons nous assurer que chaque composant est pr\u00eat pour la sortie, car avant que D puisse avancer, des mises \u00e0 jour de s\u00e9curit\u00e9 et des corrections d'autres bogues peuvent \u00eatre n\u00e9cessaires. Dans le poly d\u00e9p\u00f4t, nous pouvons cacher cela dans une branche \u00e0 long terme qui fonctionne bien. Dans le mono d\u00e9p\u00f4t, nous sommes contraints de cr\u00e9er du code dans un nouveau module. L'\u00e9quipe D devra toujours apporter des modifications \u00e0 l'ancien composant. Tout le monde peut voir le co\u00fbt que nous payons ici \u2014 nous avons maintenant le double du code, et toutes les corrections de bogues appliqu\u00e9es \u00e0 A1 et A2 doivent \u00eatre appliqu\u00e9es \u00e0 tous les deux. Avec l'approche de l'utilisation des branches dans le poly d\u00e9p\u00f4t, cela est cach\u00e9 derri\u00e8re le cherry-pick. Nous consid\u00e9rons le co\u00fbt comme moindre car il n'y a pas de duplication. D'un point de vue pratique, le co\u00fbt est le m\u00eame : vous allez cr\u00e9er, publier et maintenir deux bases de code essentiellement identiques jusqu'\u00e0 ce que vous puissiez en supprimer une. La diff\u00e9rence est que dans le mono d\u00e9p\u00f4t, cette douleur est directe et visible. <strong>C'est encore pire, et c'est bien.<\/strong><\/p>\n<p><\/p>\n<p>Enfin, nous en sommes au troisi\u00e8me point. Le retard dans la publication. Il est possible que les changements apport\u00e9s par A am\u00e9liorent la vie de l'\u00e9quipe A. Important, mais pas urgent. Pouvons-nous simplement attendre? Dans le monor\u00e9f\u00e9rentiel, nous nous dirigeons vers la consolidation de l'artefact. Bien s\u00fbr, nous en parlons \u00e0 l'\u00e9quipe D. Restez simplement sur l'ancienne version, jusqu'\u00e0 ce que vous soyez \u00e0 jour! Cela cr\u00e9e une atmosph\u00e8re de jeu de cache-cache. L'\u00e9quipe A continue de travailler sur son composant, ignorant le fait que l'\u00e9quipe D utilise une version de plus en plus obsol\u00e8te (c'est le probl\u00e8me de l'\u00e9quipe D, ils sont idiots). Pendant ce temps, l'\u00e9quipe D parle mal de l'attitude imprudente de l'\u00e9quipe A \u00e0 l'\u00e9gard de la stabilit\u00e9 du code, s'ils en parlent m\u00eame. Les mois passent. Enfin, l'\u00e9quipe D d\u00e9cide de consid\u00e9rer la possibilit\u00e9 d'une mise \u00e0 jour, mais les changements dans A ne font qu'augmenter. L'\u00e9quipe A peine se souvient quand et comment ils ont cass\u00e9 D. La mise \u00e0 jour sera plus douloureuse et prendra plus de temps. Ce qui l'envoie plus bas dans la liste des priorit\u00e9s. Jusqu'au jour o\u00f9 nous aurons un probl\u00e8me de s\u00e9curit\u00e9 dans A, ce qui nous oblige \u00e0 faire une branche. L'\u00e9quipe A doit revenir en arri\u00e8re, trouver le moment o\u00f9 D \u00e9tait stable, corriger le probl\u00e8me et le pr\u00e9parer pour la publication. <strong>C'est un choix de facto que font les gens, et c'est sans aucun doute le pire.<\/strong> On dirait que c'est bien pour les \u00e9quipes A et D, tant que nous pouvons nous ignorer.<\/p>\n<p><\/p>\n<p>Dans un monor\u00e9f\u00e9rentiel, le troisi\u00e8me n'est vraiment pas une option. Vous devez g\u00e9rer la situation de l'une des deux mani\u00e8res. Vous devez comprendre les co\u00fbts d'avoir deux branches de publication. Apprendre \u00e0 vous prot\u00e9ger contre les mises \u00e0 jour qui cassent la r\u00e9trocompatibilit\u00e9. Mais surtout : <em>vous ne pouvez pas \u00e9viter une conversation difficile.<\/em><\/p>\n<p><\/p>\n<p>D'apr\u00e8s mon exp\u00e9rience, lorsque les \u00e9quipes deviennent grandes, il n'est plus possible de garder en t\u00eate l'ensemble du syst\u00e8me, et c'est la partie la plus importante. Vous devez am\u00e9liorer la visibilit\u00e9 des divergences dans le syst\u00e8me. Vous devez travailler activement pour amener les \u00e9quipes \u00e0 d\u00e9tourner leur attention de leurs composants et \u00e0 se concentrer sur le travail des autres \u00e9quipes et des consommateurs.<\/p>\n<p><\/p>\n<p>Oui, vous pouvez cr\u00e9er des outils qui tenteront de r\u00e9soudre le probl\u00e8me des polir\u00e9p\u00f4ts. Mais mon exp\u00e9rience de l'apprentissage entre livraison continue (continuous delivery) et de l'automatisation dans les grandes entreprises me dit ceci : le comportement par d\u00e9faut sans outils suppl\u00e9mentaires est celui que vous vous attendez \u00e0 voir. <strong>Le comportement par d\u00e9faut d'un polir\u00e9p\u00f4t est l'isolation, c'est tout son sens. Le comportement d'un monor\u00e9p\u00f4t est une responsabilit\u00e9 collective et de la transparence, c'est tout son sens.<\/strong> Dans les deux cas, je vais cr\u00e9er un outil qui permettra d'adoucir les angles. En tant que responsable, je choisirai un monor\u00e9p\u00f4t \u00e0 chaque fois, car les outils doivent renforcer la culture que je souhaite, et la culture d\u00e9coule des petites d\u00e9cisions et du travail quotidien de l'\u00e9quipe.<\/p>\n<p class=\"for_users_only_msg\">Seuls les utilisateurs enregistr\u00e9s peuvent participer au sondage. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Connectez-vous<\/a><\/noindex>, s'il vous pla\u00eet.<\/p>\n<h2 class=\"default-block__polling-title\">Qui sont les plus grands fanatiques ? Les partisans :<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Monorepo<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Rust<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Sondage incorrect \/ les deux<\/p>\n<\/li>\n<\/ul>\n<p>    33 utilisateurs ont vot\u00e9. 13 utilisateurs se sont abstenus.<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/453958\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 OTUS. \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0432\u0430\u0448\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26181,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-34744","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0434\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:00:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:00:10+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Monor\u00e9p\u00f4ts : s'il vous pla\u00eet, indispensables | ProHoster","description":"La traduction de l'article est pr\u00e9par\u00e9e pour les \u00e9tudiants.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0434\u043e | ProHoster","og:description":"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:00:10+00:00","article:modified_time":"2019-10-31T19:00:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34744","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 20:28:56","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:15:38","updated":"2026-01-21 20:28:56","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/34744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=34744"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/34744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/26181"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=34744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=34744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=34744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}