Монорепозиторий: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
м Мелкие орфографические правки |
Lazil (обсуждение | вклад) м →Преимущества: орфография, пунктуация |
||
Строка 1:
{{В инкубаторе}}
В [[Система контроля версий|системе контроля версий]] '''монорепозиторий''' ("mono" от греческого μόνος, мóнос, 'единственный, одинокий' и [[репозиторий]]) является стратегией разработки программного обеспечения, когда код множества подпроектов хранится в одном и том же [[Репозиторий|репозитории]]. К 2017 году некоторым формам этой практики разработки уже более десяти лет, но основное название этой концепции появилось недавно
Строка 6:
== Преимущества ==
Существует ряд возможных преимуществ монорепозиториев над отдельными репозиториями
Простота повторного использования кода -- схожая функциональность или коммуникационные протоколы могут быть выделены в общие библиотеки и напрямую подключаться к проектам без необходимости в [[Система управления пакетами|менеджере пакетов]] для подключения зависимостей.
* '''Упрощённое управление зависимостями''' -- в многокомпонентной среде репозитория, где разные проекты зависят от сторонних компонентов, эти компоненты могут загружаться или встраиваться множество раз. В монорепозитории сборка может быть легко оптимизирована, поскольку все зависимые компоненты находятся в одной и той же базе кода.
* '''Атомарные коммиты''' -- когда проекты, работающие вместе, содержатся в раздельных репозиториях, необходимы релизы синхронизирующие версий одного проекта с другим для их совместной работы. В достаточно огромных проектах
* '''Крупномасштабный [[Рефакторинг|рефакторинг кода]]''' -- поскольку разработчики имеют доступ ко всему монолитному проекту, манипуляции по упрощению кода гарантированно сохранят функционирование каждой части проекта после окончания манипуляций.
* '''Сотрудничество между командами''' -- в монорепозитории,
== Ограничения и недостатки ==
* '''Потеря информации версий''' -- и хотя это необязательно, некоторые монорепозитории собираются, используя один номер версии сборки по всем подпроектам в монорепозитории. Это приводит к потере индивидуальной [[Нумерация версий программного обеспечения|нумерации версий]] каждого подпроекта.
* '''Отсутствие надёжности подпроектов''' -- с разделением репозиториев
* '''Больший объём хранилища''' -- с разделёнными репозиториями
== Проблема маштабируемости ==
Компании с большим числом проектов сталкиваются с проблемами маштабируемости монорепозитория, в частности касающихся инструментов сборки и систем контроля версий
=== Масштабирование системы контроля версий ===
Компании, использующие или переходящие к существующим системам контроля версий обнаружили, что программное обеспечение не могло эффективно обработать
Более десяти лет Google полагался на [[Perforce]], развёрнутой на единственной машине. В 2005 сервер для сборки Google мог быть единовременно заблокирован до 10 минут, а в 2010 от 30 секунд до 1 минуты
Facebook столкнулся с проблемами производительности системы контроля версий [[Mercurial]] и внёс вклад в разработку клиента
В марте 2014 Microsoft анонсировала
▲Более десяти лет Google полагался на [[Perforce]], развёрнутой на единственной машине. В 2005 сервер для сборки Google мог быть единовременно заблокирован до 10 минут, а в 2010 от 30 секунд до 1 минуты. <ref>{{Статья|ссылка=https://storage.googleapis.com/pub-tools-public-publication-data/pdf/39983.pdf|автор=Dan Bloch|заглавие=Still All on One Server: Perforce at Scale|год=2011|язык=English|издание=Google Inc|тип=|месяц=|число=|том=|номер=|страницы=|issn=}}</ref>
=== Масштабирование средств сборки ===▼
Лишь несколько инструментов сборки
Twitter начал разработку Pants в 2011, поскольку Buck от Facebook и Bazel от Google на тот момент имели закрытый код
▲Facebook столкнулся с проблемами производительности системы контроля версий [[Mercurial]] и внёс вклад в разработку клиента.<ref>{{Cite web|lang=en|url=https://www.theregister.com/2016/10/18/facebook_mercurial_devs_forget_git/|title=Facebook is writing a Mercurial server in Rust. This is not a drill|publisher=www.theregister.com|accessdate=2020-06-02}}</ref> В январе 2014 года сделал его быстрее конкурирующей реализации в [[Git]].
▲В марте 2014 Microsoft анонсировала о переходе к использованию [[Git]] для собственного монорепозитория. <ref>{{Cite web|lang=en-US|url=https://social.techcrunch.com/2017/05/24/microsoft-now-uses-git-and-gvfs-to-develop-windows/|title=Microsoft now uses Git and GVFS to develop Windows|publisher=TechCrunch|accessdate=2020-06-02}}</ref><ref name=":3" /> В процессе перехода Microsoft внесла существенный вклад в разработку Git клиента для удаления доступа к ненужным файлам и улучшила обработку больших файлов посредством [[:en:Virtual_File_System_for_Git|виртуальной файловой системы для Git]]. <ref>{{Cite web|lang=en-us|url=https://arstechnica.com/information-technology/2017/05/90-of-windows-devs-now-using-git-creating-1760-windows-builds-per-day/|title=Windows switch to Git almost complete: 8,500 commits and 1,760 builds each day|author=Peter Bright|date=2017-05-24|publisher=Ars Technica|accessdate=2020-06-02}}</ref>
▲=== Масштабирование средств сборки ===
▲Лишь несколько инструментов сборки работает хорошо в монорепозитории. Системы основанные на [[Ориентированный ациклический граф|ориентированном ациклическом графе]], как [[:en:Buck_(software)|Buck]], [[:en:Bazel_(software)|Bazel]], Pants и Please используют обособленные сборки и тесты для активной области разработки. <ref name=":0" />
Система сборки Please, основанная на Go, была разработана в 2016 Thought Machine, вдохновлённой Bazel от Google и недовольной Buck от Facebook
▲Twitter начал разработку Pants в 2011, поскольку Buck от Facebook и Bazel от Google на тот момент имели закрытый код. <ref>{{Cite web|lang=de-DE|url=https://jaxenter.de/8-build-tools-im-vergleich-ant-buildr-maven-bazel-buck-gradle-pants-sbt-41627|title=8 Build-Tools im Vergleich: Ant – Buildr – Maven – Bazel – Buck – Gradle – Pants – sbt|date=2016-06-10|publisher=JAXenter|accessdate=2020-06-02}}</ref> Twitter открыла код Pants в 2012 под лицензией Apache 2.0. <ref>{{Cite web|lang=en-US|url=https://sdtimes.com/apache/gitlab-releases-security-fixes-pants-1-0-sauce-labs-integration-jira-sd-times-news-digest-may-3-2016/|title=GitLab releases security fixes, Pants 1.0, and Sauce Labs integration for JIRA—SD Times news digest: May 3, 2016|date=2016-05-03|publisher=SD Times|accessdate=2020-06-02}}</ref>
▲Система сборки Please, основанная на Go, была разработана в 2016 Thought Machine вдохновлённой Bazel от Google и недовольной Buck от Facebook. <ref>{{Cite web|url=https://www.thoughtmachine.net/blog/please-the-thought-machine-build-system/|title=Please - the Thought Machine Build System {{!}} Thought Machine|publisher=www.thoughtmachine.net|accessdate=2020-06-02}}</ref>
Bazel, Buck, Pants и Please используют Starlark (ранее Skylark) - [[предметно-ориентированный язык]] сборки, основанный на [[Python]].
Некоторые специальные инструменты сборки для монорепозиториев, такие как Lerna, разрешают проблему дублирования зависимостей, но не обладают возможностями [[Ориентированный ациклический граф|ориентированного ациклического графа]].
<references />
|