{"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, unbedingt","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Monorepositories: bitte, unbedingt\" src=\"\/wp-content\/uploads\/2019\/05\/a973a60a06e7b336c08db26fa6d72149.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>\u00dcbersetzung des Artikels f\u00fcr Studierende des Kurses <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, da das Verhalten, das es in Ihren Teams f\u00f6rdert, Transparenz und kollektive Verantwortung ist, insbesondere mit dem Wachstum der Teams. In jedem Fall m\u00fcssen Sie in die Werkzeuge investieren, aber es ist immer besser, wenn das Standardverhalten das Verhalten 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 sprechen 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 (Anm. des \u00dcbersetzers: Die \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, er ist sehr schlau, und Sie sollten seine Sichtweise lesen. Zun\u00e4chst ver\u00f6ffentlichte er eine Umfrage auf Twitter:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Monorepositories: bitte, unbedingt\" 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 argumentieren, wie absurd Monorepos sind. Das Jahr 2019 hat unauff\u00e4llig begonnen. In diesem Sinne schlage ich Ihnen eine Umfrage vor. Wer sind die gro\u00dfen Fans? Bef\u00fcrworter:<\/em><br \/>\n\u2014 <em>Monorepo<\/em><br \/>\n\u2014 <em>Rust<\/em><br \/>\n\u2014 <em>Falsche Umfrage \/ sowohl als auch<\/em><\/p>\n<p><\/p>\n<p>Meine Antwort war: \u201eIch bin buchst\u00e4blich diese beiden Personen.\u201c Anstatt dar\u00fcber zu sprechen, wie toll Rust ist, lasst uns besprechen, warum ich denke, dass er sich bez\u00fcglich Monorepos irrt. Ein wenig zu mir: Ich bin CTO bei Chef Software. Wir haben etwa 100 Ingenieure, einen Codebestand von etwa 11\u201312 Jahren und 4 Hauptprodukte. Ein Teil dieses Codes befindet sich in einem Poly-Repository (meine Ausgangsposition), der andere Teil in einem Monorepository (meine aktuelle Position).<\/p>\n<p><\/p>\n<p>Bevor ich beginne: Jedes Argument, das ich hier bringe, wird auf Repositories beider Arten angewendet. Meiner Meinung nach gibt es keine technischen Gr\u00fcnde, warum Sie die eine oder andere Art von Repository w\u00e4hlen sollten. Sie k\u00f6nnen jeden Ansatz zum Laufen bringen. Ich freue mich darauf, dar\u00fcber zu sprechen, aber ich interessiere mich nicht f\u00fcr k\u00fcnstliche technische Gr\u00fcnde, die daf\u00fcr sprechen, dass das eine das andere \u00fcbertrifft. <\/p>\n<p><\/p>\n<p>Ich stimme der ersten H\u00e4lfte von Matts Standpunkt zu:<\/p>\n<p><\/p>\n<p><em>Denn in gro\u00dfem Ma\u00dfstab wird ein Monorepository all die gleichen Probleme l\u00f6sen, die auch ein Polyrepository behandelt, gleichzeitig aber zu einer st\u00e4rkeren Koh\u00e4renz Ihres Codes anregen und enorme Anstrengungen zur Skalierbarkeit Ihres Versionskontrollsystems erfordern.<\/em><\/p>\n<p><\/p>\n<p>Sie werden die gleichen Probleme l\u00f6sen m\u00fcssen, egal ob Sie sich f\u00fcr ein Monorepository oder ein Polyrepository entscheiden. Wie ver\u00f6ffentlichen Sie Releases? Welche Strategie haben Sie f\u00fcr Updates? 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 diese Herausforderungen alle bew\u00e4ltigen m\u00fcssen, w\u00e4hrend Sie wachsen. Kostenlose Dinge gibt es nicht.<\/p>\n<p><\/p>\n<p>Ich denke, dass Matt's Argument die Ansichten widerspiegelt, die viele Ingenieure (und Manager), die ich respektiere, teilen. Dies geschieht aus der Perspektive eines Ingenieurs, der an einer Komponente arbeitet, oder eines Teams, das an einer Komponente arbeitet. Man h\u00f6rt dann Dinge wie:<\/p>\n<p><\/p>\n<ul>\n<li>Die Codebasis ist schwerf\u00e4llig \u2013 ich brauche nicht all diesen Ballast.<\/li>\n<li>Es ist schwieriger zu testen, da 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 virtuellen Versionsverwaltungssysteme.<\/li>\n<\/ul>\n<p><\/p>\n<p>Zweifellos sind all diese Punkte gerechtfertigt. Das gilt in beiden F\u00e4llen \u2013 in meinem Monorepository habe ich meinen Kram, zus\u00e4tzlich zu dem, der f\u00fcr den Build ben\u00f6tigt wird... Vielleicht brauche ich noch mehr Kram. Daher erstelle ich \"einfach\" Werkzeuge, die ein Checkout des gesamten Projekts durchf\u00fchren. Oder ich erstelle ein gef\u00e4lschtes Monorepository mit Submodulen. Wir k\u00f6nnten den ganzen Tag dar\u00fcber diskutieren. Aber ich denke, dass Matts Argument die Hauptursache \u00fcbersieht, f\u00fcr die ich ziemlich stark f\u00fcr Monorepositories pl\u00e4diere:<\/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 teilen, schaffen wir de facto ein Problem der Koordination und Transparenz. Dies entspricht der Art und Weise, wie wir \u00fcber Teams denken (insbesondere wie individuelle Mitglieder \u00fcber sie denken): 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>Mit der Komplexit\u00e4t der Architektur kann ein Team sie nicht mehr alleine verwalten. Nur sehr wenige Ingenieure haben das gesamte System im Kopf. Angenommen, Sie verwalten die gemeinsame Komponente A, die von den Teams B, C und D genutzt wird. Das Team A refaktoriert, verbessert die API und \u00e4ndert die interne Implementierung. Infolgedessen sind die \u00c4nderungen nicht abw\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 Orte, an denen die neue API nicht verwendet werden kann?<\/li>\n<li>K\u00f6nnen Sie andere Komponenten anpassen 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 nicht vom Typ des Repositories abh\u00e4ngen. Sie m\u00fcssen die Teams B, C und D finden. Sie m\u00fcssen mit ihnen sprechen, um deren Zeitrahmen und Priorit\u00e4ten zu verstehen. Wir hoffen jedenfalls, dass Sie das tun werden.<\/p>\n<p><\/p>\n<p>Tats\u00e4chlich m\u00f6chten das die meisten nicht machen. Es ist weitaus weniger spannend, als einfach die verdammte API zu reparieren. Das Ganze ist menschlich und kompliziert. In einem Polirepository k\u00f6nnen Sie einfach \u00c4nderungen vornehmen, zur \u00dcberpr\u00fcfung an die Personen weitergeben, die an diesem Baustein arbeiten (wahrscheinlich nicht an B, C oder D), und dann weitermachen. Teams B, C und D k\u00f6nnen vorerst bei ihrer aktuellen Version bleiben. Sie werden aktualisieren, sobald sie Ihr Genie erkennen!<\/p>\n<p><\/p>\n<p>Im 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 wundern, warum Team A den Build kaputt gemacht hat. Das bringt A bei, dass sie meine obige Liste nicht ignorieren k\u00f6nnen. Sie m\u00fcssen dar\u00fcber sprechen, was sie vorhaben. K\u00f6nnen B, C und D agieren? Was ist, wenn B und C 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 markiert 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>Verschiebung der Release-Ver\u00e4nderungen von A, bis B, C und D diese gleichzeitig akzeptieren k\u00f6nnen.<\/li>\n<\/ol>\n<p><\/p>\n<p>Angenommen, wir haben 1 oder mehrere APIs ausgew\u00e4hlt. In diesem Fall haben wir zwei Codeabschnitte. Den alten und den neuen. Das ist in bestimmten Situationen recht praktisch. Wir geben den alten Code zur\u00fcck, kennzeichnen ihn als veraltet (deprecated) und stimmen mit Team D einen Zeitplan f\u00fcr seine Entfernung ab. Im Wesentlichen gilt das Gleiche f\u00fcr Poly- und Monorepositories.<\/p>\n<p><\/p>\n<p>F\u00fcr die Ver\u00f6ffentlichung mehrerer Versionen ben\u00f6tigen wir einen Branch. Derzeit haben wir zwei Komponenten \u2013 A1 und A2. Die Teams B und C nutzen A2, w\u00e4hrend D A1 verwendet. Es ist erforderlich, dass jede Komponente bereit f\u00fcr die Ver\u00f6ffentlichung ist, da m\u00f6glicherweise Sicherheitsupdates und Fehlerbehebungen erforderlich sind, bevor D weitermachen kann. In unserem Polirepository k\u00f6nnen wir dies in einem langlebigen Branch verstecken, der gut funktioniert. Im Monorepository erstellen wir den Code zwangsl\u00e4ufig in einem neuen Modul. Team D wird dennoch \u00c4nderungen an der \"alten\" Komponente vornehmen m\u00fcssen. Jeder kann die Kosten sehen, die wir hier tragen \u2013 unser Code hat sich nun verdoppelt, und alle Fehlerbehebungen, die auf A1 und A2 angewendet werden, m\u00fcssen f\u00fcr beide gelten. Mit dem Branch-Ansatz im Polirepository bleibt dies durch Cherry-Picking verborgen. Wir betrachten die Kosten als geringer, da es dort keine Duplizierung gibt. Aus praktischer Sicht sind die Kosten jedoch gleich: Sie werden zwei, im Wesentlichen identische, Codebasen entwickeln, ver\u00f6ffentlichen und unterst\u00fctzen, bis Sie eine von ihnen entfernen k\u00f6nnen. Der Unterschied besteht darin, dass bei dem Monorepository dieser Schmerz direkt sichtbar ist. <strong>Das ist noch schlimmer, und das ist gut.<\/strong><\/p>\n<p><\/p>\n<p>Schlie\u00dflich sind wir beim dritten Punkt angekommen: Die Verz\u00f6gerung des Releases. Es ist m\u00f6glich, dass die \u00c4nderungen von Team A das Leben von Team A verbessern. Wichtig, aber nicht dringend. K\u00f6nnen wir einfach warten? In unserem Repositories f\u00f6rdern wir dies zur Festschreibung des Artefakts. Nat\u00fcrlich sprechen wir dar\u00fcber mit Team D. Bleibt einfach bei der alten Version, bis ihr nachkommt! Das spielt mit den \u00c4ngsten. Team A arbeitet weiter an seinem Konzept und ignoriert, dass Team D eine zunehmend veraltete Version verwendet (das ist das Problem von Team D, sie sind naiv). In der Zwischenzeit spricht Team D schlecht \u00fcber die fahrl\u00e4ssige Haltung von Team A gegen\u00fcber der Stabilit\u00e4t des Codes, falls sie \u00fcberhaupt dar\u00fcber sprechen. Monate vergehen. Schlie\u00dflich entscheidet sich Team D, die M\u00f6glichkeit eines Updates zu pr\u00fcfen, doch die \u00c4nderungen in Team A haben sich nur vergr\u00f6\u00dfert. Team A kann sich kaum erinnern, wann und wie sie Team D gest\u00f6rt haben. Das Update wird schmerzhafter und dauert l\u00e4nger. Was es weiter nach unten auf der Priorit\u00e4tenliste schiebt. Bis zu dem Tag, an dem wir ein Sicherheitsproblem in Team A haben, was uns zwingt, einen Branch zu machen. Team A muss in der Zeit zur\u00fcckreisen, den Moment finden, als Team D stabil war, das Problem dort beheben und es f\u00fcr den Release vorbereiten. <strong>Das ist de facto die Wahl, die Menschen treffen, und sie ist sichergestellt die schlechteste.<\/strong> Es scheint, dass es sowohl f\u00fcr Team A als auch f\u00fcr Team D gut ist, solange wir einander ignorieren k\u00f6nnen.<\/p>\n<p><\/p>\n<p>In einem Monorepo ist das dritte - wirklich keine Option. Sie sind gezwungen, die Situation auf eine von zwei Arten zu bew\u00e4ltigen. Sie m\u00fcssen die Kosten von zwei Release-Branches betrachten. Lernen Sie, sich vor \u00c4nderungen zu sch\u00fctzen, die die Abw\u00e4rtskompatibilit\u00e4t brechen. Aber das Wichtigste ist: <em>Sie werden nicht um ein schwieriges Gespr\u00e4ch herumkommen.<\/em><\/p>\n<p><\/p>\n<p>Meiner Erfahrung nach, wenn Teams gr\u00f6\u00dfer werden, gibt es keine M\u00f6glichkeit mehr, das gesamte System im Kopf zu halten, und das ist der wichtigste Teil. Sie m\u00fcssen die Sichtbarkeit von Konflikten im System verbessern. Sie m\u00fcssen aktiv daran arbeiten, die Teams dazu zu bringen, ihre Blicke von ihren eigenen Komponenten abzuwenden und die Arbeiten anderer Teams und ihrer Benutzer zu betrachten.<\/p>\n<p><\/p>\n<p>Ja, Sie k\u00f6nnen Werkzeuge erstellen, die versuchen, Probleme mit Poly-Repositories zu l\u00f6sen. Doch meine Erfahrungen mit Continuous Delivery und Automatisierung in gro\u00dfen Unternehmen zeigen mir Folgendes: Das Standardverhalten ohne den Einsatz zus\u00e4tzlicher Werkzeuge ist das Verhalten, das Sie erwarten sollten. <strong>Das Standardverhalten eines Poly-Repositories besteht in der Isolation; das ist der ganze Sinn. Das Standardverhalten eines Mono-Repositories dagegen ist gemeinsame Verantwortung und Transparenz; das ist der ganze Sinn.<\/strong> In beiden F\u00e4llen werde ich ein Werkzeug erstellen, das es erm\u00f6glicht, die Ecken abzurunden. Als F\u00fchrungskraft werde ich jedes Mal ein Mono-Repository w\u00e4hlen, weil die Werkzeuge die Kultur unterst\u00fctzen sollten, die ich f\u00f6rdern m\u00f6chte, und diese Kultur entsteht aus kleinen Entscheidungen und der t\u00e4glichen Arbeit des Teams.<\/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 melden Sie sich an.<\/a><\/noindex>Sind Sie an Contour interessiert?<\/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>                    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>                    Falsche Umfrage \/ sowohl als auch<\/p>\n<\/li>\n<\/ul>\n<p>    33 Nutzer haben abgestimmt. 13 Nutzer 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 4.9.10 - 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 \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,\" \/>\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) 4.9.10\" \/>\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 \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,\" \/>\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\udd47Monorepos: unverzichtbar | ProHoster","description":"Der Artikel wurde f\u00fcr die Studierenden des Kurses \u201eDevOps Praktiken und Werkzeuge\u201c im Bildungsprojekt OTUS verfasst. Sie sollten ein Monorepo w\u00e4hlen, da es in Ihren Teams Transparenz und kollektive Verantwortung f\u00f6rdert, insbesondere bei wachsendem Team. In jedem Fall m\u00fcssen Sie in die Werkzeuge investieren, aber es ist immer besser, wenn das standardm\u00e4\u00dfige Verhalten dieses Verhalten ist.","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 \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,","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"},"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}]}}