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

Этот вопрос очень похож на , Объект 29 в Эффективном Java - "Рассматривает безопасные с точки зрения типов неоднородные контейнеры". Ответ Laz является самым близким к решению Bloch. Однако оба помещенные и добираются, должен использовать литерал Класса для безопасности. Подписи стали бы:

public  void addFriend(String name, Class type, T animal);
public  T callFriend(String name, Class type);

Внутренняя часть оба метода необходимо проверить, что параметры нормальны. Посмотрите Эффективный Java и Класс javadoc для большего количества информации

33
задан laalto 4 August 2009 в 17:10
поделиться

5 ответов

На самом деле DVCS значительно упростил непрерывную интеграцию.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

32
ответ дан 27 November 2019 в 18:25
поделиться

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

7
ответ дан 27 November 2019 в 18:25
поделиться

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

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

6
ответ дан 27 November 2019 в 18:25
поделиться

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

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


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

См., Например, Continuous Integration Spring Очистка сообщения в блоге GitHub.

5
ответ дан 27 November 2019 в 18:25
поделиться

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

  • DVCS отделяет коммиты от слияний.
  • CI запускается в выбранном вами репозитории.

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

1
ответ дан 27 November 2019 в 18:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: