Подтвердить что ты не робот

Являются ли DVCS похожими на Git неуместными для команд, использующих непрерывную интеграцию?

Мои процессы разработки нашей команды основаны на непрерывной интеграции . Единственные ветки, которые мы создаем, - это ветки обслуживания, когда мы выпускаем, но в противном случае разработчики, как ожидается, будут регулярно (ежедневно, если не чаще) совершать транзакции с багажником, чтобы каждый работал всегда, постоянно тестировался и все это хорошо.

Мое понимание DVCS заключается в том, что оно отлично подходит для ветвления. Я работал несколько лет назад в команде, где это было бы очень полезно, так как каждая битва развития была сделана на ветке и только сливалась при завершении и тестировании. Но это была другая философия от непрерывной интеграции.

Но мне кажется, что для команды, которая использует непрерывную интеграцию, groovy функции инструментов DVCS, такие как Git, не будут быть особенно актуальными и могут даже препятствовать процессу непрерывной интеграции, если слияние изменений требует дополнительных шагов, которые могут быть забыты.

Я уверен, что есть другие преимущества DVCS (например, совершение очень быстро, потому что оно локально, предположительно, слияние с основной ветвью может происходить в фоновом режиме, пока разработчик продолжает работать).

Но по этому вопросу меня интересует, как команды, использующие DVCS и непрерывную интеграцию, примиряют две, казалось бы, противоречивые философии. Меня в основном интересуют люди, которые на самом деле это делают.

4b9b3361

Ответ 1

Фактически DVCS значительно упростил интеграцию.

С центральным VCS каждый разработчик имеет право совершать прямо в trunk, и поэтому он может совершать багги-код. CI обнаружит это после факта. Таким образом, возможно сломать сундук даже с CI.

С другой стороны, основные операции в мире DVCS подразделяются и объединяются. Поскольку слияние является явным и отдельным процессом или фиксацией для соединительной линии, всегда можно проверить результат слияния до, который он приземляется на туловище. У меня нет опыта работы с Git, но разработчики Bazaar VCS успешно использовали эту технику не менее 3,5 лет с помощью инструмента PQM.

В основном рабочий процесс PQM выглядит следующим образом: разработчик публикует свою ветку, чтобы ее можно было объединить, затем он отправляет специальное электронное письмо боту PQM с инструкциями слияния. Когда PQM получает запрос на слияние, он создает отдельную ветвь интеграции (копию соединительной линии), затем объединяет ветвь разработчика и запускает тесты по полученному коду. Если все тесты пройдены, то ветвь интеграции переносится в магистраль, иначе разработчик получит электронное письмо с журналом неудачных тестов.

Запуск всех тестов для проекта Bazaar требует времени, но тесты выполняются по запросу на отдельном сервере. Разработчики не будут блокироваться слияниями и могут продолжать работать над другими задачами.

В результате рабочего процесса слияния на основе PQM соединительная линия bzr никогда не прерывается (по крайней мере, до тех пор, пока есть достаточные приемочные и регрессионные тесты).

Ответ 2

Поскольку все DVCS могут использоваться с рабочим процессом, который использует централизованный репозиторий, нет никаких проблем. Политика диктует, что разработчик должен вносить свои изменения в центральный репозиторий точно так же, как это требует политика, для нераспределенной VCS. Дополнительные инструменты, позволяющие разработчику редактировать наборы патчей, никоим образом не мешают, а на самом деле значительно облегчают создание поддерживаемой базы кода.

Ответ 3

Использование DVCS, такого как Git, не мешает вам регулярно выполнять центральный репозиторий. Тем не менее, это означает, что вы можете сделать промежуточные коммиты локально и только нажать изменения в центральный репозиторий, как только вы закончите.

Таким образом, вы получаете преимущества от контроля источника, даже когда вы на полпути выполняете функцию, не нарушая сборку для других разработчиков.

Ответ 4

Непрерывные инструменты интеграции, такие как Hudson, поддерживают DVCS, поэтому я подозреваю, что это возможно для согласования непрерывной интеграции с распределенным контролем версий.

Во-первых, я думаю, что с использованием DVCS с использованием рабочих процессов, таких как рабочий процесс ветвей темы, CI может оказаться менее необходимым. Во-вторых, вы можете настроить (единый, центральный) репозиторий непрерывной интеграции, к которому вы нажимаете, когда будете готовы, и перехватывает CI.


Добавлено 07-08-2009:

См. например Непрерывная интеграция Spring Очистка в блоге GitHub.

Ответ 5

Две идеи, которые я нашел, помогают объяснить это:

  • Отдельные записи DVCS фиксируются в результате слияния.
  • CI работает против выбранного вами репозитория.

Итак, суть в том, как слияния встраиваются в репозитории, которые вы хотите запустить с помощью инструмента CI. При запуске вы можете выбрать только один репозиторий.