проекта документации в репозитории с кодом?
Отличный вопрос для собеседования
в отличии от хранения проекта документации в репозитории без кода?
Привет. Имеете в виду проблемы монорепозитория?
я не знаю, но с удовольствием послушал бы ответы)
Самая распространённая проблема — очередь на слияние. Бывает из-за этого ваш коммит может отставать от актуального состояния. Ну и надо уметь в rebase.
Плюсы: 1. Дока версионируется вместе с кодом, тяжелее потерять и сделать рассинхрон; 2. Можно загнать разработчиков писать документацию, не отходя от кассы — в их же проекте; 3. Можно передавать заказчику всё единым дистрибутивом.
можно поподробней? я не понял, и у меня родилось несколько несвязанных объяснений твоих слов
Если команда начинает изменять один и тот же файл, то при мерже будут возникать конфликты, которые надо уметь решать.
Например, описанное в доке может относиться к нескольким проектам, тогда логичнее завести отдельный репозиторий под документацию. В противном случае будут дубли в каждом проекте. Ну и предполагаю, что попроектное хранение не оч вписывается в концепцию единого источника.
Это известная проблема монорепозиториев, когда все коммиты сбрасываются в одну репу, то формируется очень большое кол-во деревьев. И если у нас большое кол-во проектов\команд пушит в эту репу, то возникает временной лаг. Когда твой коммит становится в очередь. Находясь в очереди твой коммит может устареть и тогда тебе надо отменить его, ребейзнуть локально до актуального стейта и снова запушить. В очень больших командах с монорепозиторием в моей практике было, что коммит мог висеть в очереди и час. Плюс, не забываем, что коммит надо апрувнуть. На апрув, а точнее очередь на слияние, тоже может быть очередь. Поэтому, я для себя понял, что если команда большая, то монорепа не лучший выбор.
> все коммиты сбрасываются в одну репу, то формируется очень большое кол-во деревьев именно коммиты, а не PR? или в данном случае это одно и тоже? у нас сейчас только для репозитория документации висит 500 незакрытых PR, то есть они в работе или ждут апрува и вливания и я не вижу здесь никаких проблем, так как люди не правят одно и то же, то есть не выполняют одинаковых задач, а конфликты если и появляются, то относятся к разным вещам (хоть и в одном файле) и легко решаются > В очень больших командах с монорепозиторием в моей практике было, что коммит мог висеть в очереди и час. у нас PR с изменения может и месяц провисеть, ожидая апрува и вливания, и в этом я тоже не вижу проблем, даже через месяц конфликты редки, а если и есть, то легкорешаемые
про обычный
Про обычный все справедливо. А Фокс про моно вещает. Там есть нюансы, насколько я могу судить.
Да, конечно, я приравнял коммиты с PR\MR в данном контексте. То что у вас незакрытые таски висят по месяцу — уникальный процесс именно для вашей компании. Если вы работаете по недельным спринтам, то задержка в закрытии задач неприемлема. Особенно, если у вас на таски привязан и KPI.
понял, кажется у нас очень хороший уникальный процесс)
Тем более смотрите. Вот такая ситуация. У вас 20 микросервисов в монорепе и согласно релизной концепции, каждый микросервис обзаводится релизной веткой только если он не ломает работу остальных 19 микросервисов. И вот вы либо бежите вперед или отстаёте; отсюда и возникает проблема в актуальном состоянии всего продукта. Ну и если у вас много этих микросервисов, то рано или поздно, ваш git станет захлёбываться от коммитов (тут именно про них) в рамках одной монорепы. Любое обновление состояния (даже локального) начинает занимать очень большое время. Я знаю в Гугле монорепа, но у них своя система контроля версий, а как и что, я ессно не знаю.
Наверное, имеет смысл уточнить, какая именно документация. Допустим, документация, которая после коммита пушится и заливается на продакшн - это одно. Документация, которая просто "живет в себе" (например, для команды) - это другое. Т.е. входных данных изначально должно быть больше, ибо непонятно, о чем речь. Поэтому ответы выше по треду имеют свою ценность, но только по отношению к конкретной ситуации, которую _предполагал_ автор каждого этого ответа.
Спасибо за уточнение! Вопрос был про документацию для продакшна.
Всегда можно восстановить если потеряется или потрется текст (такое бывает)
Тогда следует уточнить вопрос про релизные циклы. Ибо, допустим, когда релизный цикл документации один, а выпуск продукта - другой встает вопрос того, что в дереве реальная каша. Да, можно встроить сборку отдельно по коду и по исходникам документации - допустим, когда делается фикс к документации, но код остается нетронутым (например,Gitlab CI это позволяет). Но тогда придется в одном дереве держать разные теги например, 2.1.3, 2.1.3-docs - а бранчей вообще будет огромное количество, Насколько это удобно - вопрос использующих это дерево.
Интересуюсь этой темой, но пока не понимаю жаргона этой области. Для начала, монорепа - это репозиторий, в котором хранится код вместе с документацией?
Вообще, монорепозиторий это когда вся компания хранит весь код буквально в одном репозитории. Для этого используют специальные системы контроля версий (не гит). Применяют в некоторых крупных компаниях, точно знаю про Яндекс и Фейсбук.
Документируете вы продукт, а продукт может состоять из множества приложений/сервисов/библиотек, код которых разнесен по множеству репозиториев.
Какие плюсы у такого подхода? И минусы? Про минусы, как понимаю, можно долго ждать мержа?
Спасибо! А документация при этом тоже может там же храниться, как следует из обсуждения, предшествующего посту к которому я задал вопрос?
Всё в одном репозитории. Вообще все, все продукты, все вспомогательные штуки, тесты, документация. Когда вы приедете работать в такую компанию, вас научат. До тех пор можно об этом не беспокоиться:)
Обучаться рад, не боюсь этого, обучаюсь быстро. Но они жев вакансиях требуют опыт работы и
Никто не требует в вакансиях навык работы с монорепозиторием
А, гит полезен, да.
Уточните вопрос, пожалуйста. С чем мы это сравниваем: с хранением доки в отдельном репозитории или с другими инструментами для документации?
Прошу прощения, был занят. @Nick_Volynkin Всё ответил. Единственное, в чем я с ним не согласен — обычно монорепа требует своего решения, например, Google или Yandex в качестве контроля версий используют свои решения, а не GitHub | Gitlab. А вот в тех компаниях, которые используют традиционные системы контроля и имеют достаточно много микросервисов, присутствует весьма ощутимый gap между эосновными действиями. Монорепа скорее хороша, когда ваш проект небольшой. Например, у вас не такое большое кол-во библиотек и классов. Вы собираете из них проект (допустим JAVA) и тут же собираете документацию, например JavaDoc. Тогда это ваш выбор.
Обсуждают сегодня