{"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\/de\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","title":{"rendered":"Monorepositories: bitte, notwendig","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Monorepositories: bitte, notwendig\" src=\"\/wp-content\/uploads\/2019\/05\/a973a60a06e7b336c08db26fa6d72149.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Die \u00dcbersetzung des Artikels wurde f\u00fcr die Studierenden des Kurses vorbereitet <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/g5Rz\/\">\u201eDevOps-Praktiken und -Werkzeuge\u201c<\/a><\/noindex> im Bildungsprojekt OTUS.<\/em><\/p>\n<p>Sie sollten ein Monorepo w\u00e4hlen, weil das Verhalten, das es in Ihren Teams f\u00f6rdert, Transparenz und kollektive Verantwortung ist, besonders beim Wachstum der Teams. In jedem Fall m\u00fcssen Sie in Werkzeuge investieren, aber es ist immer besser, wenn das Standardverhalten das ist, das Sie in Ihren Teams sehen m\u00f6chten. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h1 id=\"pochemu-my-govorim-ob-etom\">Warum reden wir dar\u00fcber?<\/h1>\n<p><\/p>\n<p>Matt Klein hat einen Artikel geschrieben <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@mattklein123\/monorepos-please-dont-e9a279be011b\">\u201eMonorepos: Bitte nicht!\u201c<\/a><\/noindex>\u200a (Anmerkung des \u00dcbersetzers: \u00dcbersetzung auf Habr\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/435306\/\">\u201eMonorepositories: Bitte nicht\u201c<\/a><\/noindex>). Ich mag Matt, ich denke, dass er sehr klug ist, und Sie sollten seinen Standpunkt lesen. Urspr\u00fcnglich ver\u00f6ffentlichte er eine Umfrage auf Twitter:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Monorepositories: bitte, notwendig\" src=\"\/wp-content\/uploads\/2019\/05\/edbc65b80288045e08394821c17a77a9.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>\u00dcbersetzung:<\/em><br \/>\n<em>An diesem Neujahrstag werde ich dar\u00fcber streiten, wie absurd Monorepositories sind. Das Jahr 2019 begann unauff\u00e4llig. In diesem Sinne schlage ich Ihnen eine Umfrage vor. Wer sind die gro\u00dfen Fans? Bef\u00fcrworter:<\/em><br \/>\n\u2014 <em>Monorepositories<\/em><br \/>\n\u2014 <em>Rust<\/em><br \/>\n\u2014 <em>Falsche Umfrage \/ beide<\/em><\/p>\n<p><\/p>\n<p>Meine Antwort war: \u201eIch bin buchst\u00e4blich beide dieser Personen\u201c. Anstatt dar\u00fcber zu sprechen, wie Rust eine Droge ist, lassen Sie uns herausfinden, warum ich denke, dass er sich \u00fcber Monorepositories irrt. Ein wenig \u00fcber mich. Ich bin Chief Technology Officer bei Chef Software. Wir haben etwa 100 Ingenieure, eine Codebasis, die etwa 11\u201312 Jahre alt ist, und 4 Hauptprodukte. Ein Teil dieses Codes befindet sich in einem Polyrepo (meine Ausgangsposition), ein Teil in einem Monorepo (meine aktuelle Position).<\/p>\n<p><\/p>\n<p>Bevor ich anfange: Jedes Argument, das ich hier anf\u00fchre, wird auf Repositories beider Arten angewendet. Meiner Meinung nach gibt es keine technischen Gr\u00fcnde, warum Sie einen bestimmten Repositorytyp w\u00e4hlen sollten. Sie k\u00f6nnen jeden Ansatz zum Laufen bringen. Ich freue mich, dar\u00fcber zu sprechen, aber ich bin nicht an k\u00fcnstlichen technischen Gr\u00fcnden interessiert, warum das eine besser ist als das andere. <\/p>\n<p><\/p>\n<p>Ich stimme dem ersten Teil von Matts Standpunkt zu:<\/p>\n<p><\/p>\n<p><em>Weil ein Monorepo im gro\u00dfen Ma\u00dfstab all dieselben Probleme l\u00f6sen wird, die auch ein Polyrepo l\u00f6st, w\u00e4hrend es Sie gleichzeitig dazu anregt, die Koh\u00e4sion Ihres Codes stark zu erh\u00f6hen und unglaubliche Anstrengungen erfordert, um die Skalierbarkeit Ihres Versionskontrollsystems zu steigern.<\/em><\/p>\n<p><\/p>\n<p>Sie werden mit denselben Problemen konfrontiert, egal ob Sie ein Monorepo oder ein Polyrepo w\u00e4hlen. Wie ver\u00f6ffentlichen Sie Releases? Wie gehen Sie mit Updates um? R\u00fcckw\u00e4rtskompatibilit\u00e4t? Kreuzabh\u00e4ngigkeiten zwischen Projekten? Welche Architekturstile sind akzeptabel? Wie verwalten Sie Ihre Build- und Testinfrastruktur? Die Liste ist endlos. Und Sie werden sie alle l\u00f6sen, w\u00e4hrend Sie wachsen. Kostenlosen K\u00e4se gibt es nicht.<\/p>\n<p><\/p>\n<p>Ich denke, das Argument von Matt \u00e4hnelt den Ansichten, die viele Ingenieure (und Manager), die ich respektiere, teilen. Es kommt aus der Perspektive eines Ingenieurs, der an einer Komponente arbeitet, oder eines Teams, das an einer Komponente arbeitet. Sie h\u00f6ren so etwas wie:<\/p>\n<p><\/p>\n<ul>\n<li>Die Codebasis ist un\u00fcbersichtlich \u2013 ich brauche diesen ganzen Kram nicht.<\/li>\n<li>Es ist schwieriger zu testen, weil ich all diesen Kram \u00fcberpr\u00fcfen muss, den ich nicht brauche.<\/li>\n<li>Es ist schwieriger, mit externen Abh\u00e4ngigkeiten zu arbeiten.<\/li>\n<li>Ich brauche meine eigenen Versionierungssysteme.<\/li>\n<\/ul>\n<p><\/p>\n<p>Sicherlich sind all diese Punkte gerechtfertigt. Das gilt in beiden F\u00e4llen \u2013 im Polyrepo habe ich meinen Kram, zus\u00e4tzlich zu dem, der f\u00fcr den Build erforderlich ist... M\u00f6glicherweise ben\u00f6tige ich noch mehr Kram. Deshalb erstelle ich \"einfach\" Werkzeuge, die das Checkout des gesamten Projekts erm\u00f6glichen. Oder ich mache ein falsches Monorepo mit Submodulen. Wir k\u00f6nnten den ganzen Tag dar\u00fcber diskutieren. Aber ich denke, dass Matts Argument den entscheidenden Grund \u00fcberspringt, f\u00fcr den ich ziemlich stark f\u00fcr das Monorepo pl\u00e4diert habe:<\/p>\n<p><\/p>\n<h1 id=\"on-provociruet-obschenie-i-pokazyvaet-problemy\">Es f\u00f6rdert die Kommunikation und zeigt Probleme auf.<\/h1>\n<p><\/p>\n<p>Wenn wir Repositories aufteilen, schaffen wir de facto ein Problem der Koordination und Transparenz. Das entspricht dem, wie wir \u00fcber Teams nachdenken (insbesondere dem, wie einzelne Mitglieder \u00fcber sie nachdenken): Wir sind verantwortlich f\u00fcr eine bestimmte Komponente. Wir arbeiten in relativer Isolation. Die Grenzen sind auf mein Team und die Komponente(n) festgelegt, an denen wir arbeiten.<\/p>\n<p><\/p>\n<p>Bei einer komplexeren Architektur kann ein einzelnes Team sie nicht mehr alleine verwalten. Nur sehr wenige Ingenieure haben das gesamte System im Kopf. Angenommen, Sie verwalten eine gemeinsame Komponente A, die von den Teams B, C und D verwendet wird. Team A f\u00fchrt Refactoring durch, verbessert die API und \u00e4ndert die interne Implementierung. Infolgedessen sind die \u00c4nderungen nicht r\u00fcckw\u00e4rtskompatibel. Welchen Rat w\u00fcrden Sie geben?<\/p>\n<p><\/p>\n<ul>\n<li>Finden Sie alle Stellen, an denen die alte API verwendet wird.<\/li>\n<li>Gibt es Stellen, an denen die neue API nicht verwendet werden kann?<\/li>\n<li>K\u00f6nnen Sie andere Komponenten reparieren und testen, um sicherzustellen, dass sie nicht kaputtgehen?<\/li>\n<li>K\u00f6nnen diese Teams Ihre \u00c4nderungen jetzt \u00fcberpr\u00fcfen?<\/li>\n<\/ul>\n<p><\/p>\n<p>Bitte beachten Sie, dass diese Fragen unabh\u00e4ngig vom Typ des Repositories sind. Sie m\u00fcssen die Teams B, C und D finden. Sie m\u00fcssen mit ihnen sprechen, herausfinden, wie viel Zeit sie ben\u00f6tigen, und ihre Priorit\u00e4ten verstehen. Jedenfalls hoffen wir, dass Sie dies tun werden.<\/p>\n<p><\/p>\n<p>Tats\u00e4chlich m\u00f6chte niemand das machen. Es ist viel weniger aufregend, als einfach die verdammte API zu reparieren. Das alles ist menschlich und kompliziert. In einem Poly-Repository k\u00f6nnen Sie einfach \u00c4nderungen vornehmen, diese zur \u00dcberpr\u00fcfung an diejenigen geben, die an dieser Komponente arbeiten (wahrscheinlich nicht B, C oder D), und weitermachen. Die Teams B, C und D k\u00f6nnen einfach auf ihrer aktuellen Version bleiben. Sie werden aktualisieren, wenn sie Ihre Genialit\u00e4t erkennen!<\/p>\n<p><\/p>\n<p>In einem Monorepo verschiebt sich die Verantwortung standardm\u00e4\u00dfig. Team A \u00e4ndert seine Komponente, und wenn es nicht vorsichtig ist, bricht es sofort B, C und D. Das f\u00fchrt dazu, dass B, C und D vor der T\u00fcr von A stehen und sich fragen, warum Team A den Build kaputt gemacht hat. Das lehrt A, dass sie meine obige Liste nicht ignorieren k\u00f6nnen. Sie m\u00fcssen dar\u00fcber sprechen, was sie vorhaben. K\u00f6nnen B, C und D vorankommen? Was ist, wenn B und C vorankommen k\u00f6nnen, aber D eng mit den Nebeneffekten des alten Algorithmus verbunden war?<\/p>\n<p><\/p>\n<p>Dann m\u00fcssen wir dar\u00fcber sprechen, wie wir aus dieser Situation herauskommen:<\/p>\n<p><\/p>\n<ol>\n<li>Unterst\u00fctzung mehrerer interner APIs, w\u00e4hrend der alte Algorithmus als veraltet gekennzeichnet wird, bis D ihn nicht mehr verwenden kann.<\/li>\n<li>Unterst\u00fctzung mehrerer Versionen von Releases, eine mit der alten Schnittstelle, eine mit der neuen.<\/li>\n<li>Verschieben Sie die Ver\u00f6ffentlichung von \u00c4nderungen A, bis B, C und D sie gleichzeitig annehmen k\u00f6nnen.<\/li>\n<\/ol>\n<p><\/p>\n<p>Angenommen, wir haben 1, mehrere APIs ausgew\u00e4hlt. In diesem Fall haben wir zwei Code-St\u00fccke. Den alten und den neuen. In einigen Situationen ist das ziemlich praktisch. Wir setzen den alten Code zur\u00fcck, markieren ihn als veraltet (deprecated) und koordinieren den Zeitplan f\u00fcr seine Entfernung mit dem Team D. Im Grunde genommen ist es f\u00fcr Poly- und Monorepos identisch.<\/p>\n<p><\/p>\n<p>F\u00fcr die Ver\u00f6ffentlichung mehrerer Versionen ben\u00f6tigen wir einen Branch. Jetzt haben wir zwei Komponenten \u2014 A1 und A2. Die Teams B und C verwenden A2, w\u00e4hrend D A1 verwendet. Wir m\u00fcssen sicherstellen, dass jede Komponente zur Ver\u00f6ffentlichung bereit ist, denn bevor D weitermachen kann, k\u00f6nnen sicherheitsrelevante Updates und andere Fehlerkorrekturen erforderlich sein. In einem Polyrepo k\u00f6nnen wir dies in einem langlebigen Branch verstecken, der gut funktioniert. In einem Monorepo erzwingen wir die Erstellung des Codes in einem neuen Modul. Das Team D muss dennoch \u00c4nderungen am \"alten\" Bestandteil vornehmen. Jeder kann die Kosten sehen, die wir hier tragen \u2014 wir haben jetzt doppelt so viel Code, und jegliche Fehlerkorrekturen, die auf A1 und A2 angewendet werden, m\u00fcssen f\u00fcr beide gelten. Mit dem Ansatz, Branches in einem Polyrepo zu verwenden, wird dies durch Cherry-Picking verborgen. Wir betrachten die Kosten als geringer, da es keine Duplikate gibt. Aus praktischer Sicht sind die Kosten jedoch gleich: Sie werden zwei haupts\u00e4chlich identische Codebasen erstellen, ver\u00f6ffentlichen und pflegen, bis Sie eine von ihnen entfernen k\u00f6nnen. Der Unterschied besteht darin, dass der Schmerz im Monorepo direkt und offensichtlich ist. <strong>Das ist noch schlimmer, und das ist gut.<\/strong><\/p>\n<p><\/p>\n<p>Endlich sind wir beim dritten Punkt angekommen. Die Verz\u00f6gerung des Releases. M\u00f6glicherweise werden die \u00c4nderungen, die A vornimmt, das Leben des Teams A verbessern. Wichtig, aber nicht dringend. K\u00f6nnen wir einfach aufschieben? Im Monorepository dr\u00e4ngen wir darauf, das Artefakt zu fixieren. Nat\u00fcrlich sprechen wir mit Team D dar\u00fcber. Bleibt einfach bei der alten Version, bis ihr aufholt! Das macht ein Spiel mit den Nerven. Team A arbeitet weiterhin an seiner Komponente und ignoriert die Tatsache, dass Team D eine zunehmend veraltete Version nutzt (das ist das Problem von Team D, sie sind dumm). W\u00e4hrenddessen spricht Team D schlecht \u00fcber die nachl\u00e4ssige Haltung von Team A zur Code-Stabilit\u00e4t, wenn sie \u00fcberhaupt dar\u00fcber sprechen. Monate vergehen. Schlie\u00dflich beschlie\u00dft Team D, die M\u00f6glichkeit eines Updates zu pr\u00fcfen, aber die \u00c4nderungen in A sind nur zahlreicher geworden. Team A kann sich kaum daran erinnern, wann und wie sie D kaputt gemacht haben. Das Update wird schmerzhafter und dauert l\u00e4nger. Was es weiter unten auf der Priorit\u00e4tenliste nach unten schiebt. Bis zu dem Tag, an dem wir ein Sicherheitsproblem in A haben, das uns zwingt, einen Branch zu machen. Team A muss in der Zeit zur\u00fcckgehen, den Moment finden, als D stabil war, das Problem dort beheben und es releasebereit machen. <strong>Das ist de facto die Wahl, die die Leute treffen, und sie ist zweifellos die schlechteste.<\/strong> Es scheint gut f\u00fcr sowohl Team A als auch D zu sein, solange wir einander ignorieren k\u00f6nnen.<\/p>\n<p><\/p>\n<p>Im Monorepository ist das dritte wirklich keine Option. Man muss mit der Situation auf eine von zwei Arten umgehen. Man muss die Kosten von zwei Release-Branches erkennen. Man muss lernen, sich vor inkompatiblen Updates zu sch\u00fctzen. Aber das Wichtigste: <em>man kommt um ein schwieriges Gespr\u00e4ch nicht herum.<\/em><\/p>\n<p><\/p>\n<p>Nach meiner Erfahrung, wenn Teams gr\u00f6\u00dfer werden, gibt es nicht mehr die M\u00f6glichkeit, das gesamte System im Kopf zu behalten, und das ist der wichtigste Teil. Man muss die Sichtbarkeit der Unterschiede im System verbessern. Man muss aktiv daran arbeiten, die Teams dazu zu bringen, ihren Blick von ihren Komponenten abzuwenden und die Arbeiten anderer Teams und Nutzer zu betrachten.<\/p>\n<p><\/p>\n<p>Ja, Sie k\u00f6nnen Werkzeuge erstellen, die versuchen, das Problem der Poly-Repositories zu l\u00f6sen. Aber meine Erfahrung mit kontinuierlicher Bereitstellung (Continuous Delivery) und Automatisierung in gro\u00dfen Unternehmen sagt mir Folgendes: Das Standardverhalten ohne zus\u00e4tzliche Werkzeuge ist das Verhalten, das Sie erwarten zu sehen. <strong>Das Standardverhalten eines Poly-Repositories ist Isolation, das ist der ganze Sinn. Das Standardverhalten eines Monorepositories ist gemeinsame Verantwortung und Transparenz, das ist der ganze Sinn.<\/strong> In beiden F\u00e4llen werde ich ein Werkzeug entwickeln, das hilft, die Ecken abzurunden. Als Leiter werde ich jedes Mal ein Monorepository w\u00e4hlen, weil Werkzeuge die Kultur st\u00e4rken sollten, die ich m\u00f6chte, und Kultur entsteht aus kleinen Entscheidungen und der t\u00e4glichen Teamarbeit.<\/p>\n<p class=\"for_users_only_msg\">Nur registrierte Benutzer k\u00f6nnen an der Umfrage teilnehmen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Bitte einloggen<\/a><\/noindex>.<\/p>\n<h2 class=\"default-block__polling-title\">Wer sind die gr\u00f6\u00dferen Fanatiker? Bef\u00fcrworter:<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Monorepositories<\/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>                    Falsche Umfrage \/ beide<\/p>\n<\/li>\n<\/ul>\n<p>    33 Benutzer haben abgestimmt. 13 Benutzer haben sich enthalten.<br \/>\n<br \/>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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\udd47Monorepositories: bitte, notwendig | ProHoster","description":"Die \u00dcbersetzung des Artikels wurde f\u00fcr Studierende vorbereitet.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/34744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=34744"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/34744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/26181"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=34744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=34744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=34744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}