Организация рабочих процессов#

Централизованная модель#

Самый очевидный и распространенный способ организации взаимодействия – это централизованная модель. Рабочий процесс в ней организован вокруг одного публичного хранилища. В этой модели управление разработкой берет менеджер проекта. В его обязанности входит планирование, распределение задач по разработчикам, контроль за исполнением планов. Участники проекта знакомы друг с другом и доверяют друг другу. В этой модели взаимодействия каждый разработчик обладает равными правами доступа. Она актуальна для небольших команд с небольшим количеством участников. С течением времени команда разрастается. Чтобы защититься от непреднамеренных внесений нерабочего кода придерживаются следующих правил, которые дополнительно проверяют изменения:

  • опытный разработчик рецензирует код;

  • тестировщик прогоняет новую версию программы через тесты;

  • ответственный за модуль разработчик консультирует тех, кто вносит изменения в этот модуль;

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

../_images/workflow-central.png

Модель с интеграционным менеджером#

Централизованная модель взаимодействия не подходит для работы с открытым ПО, где разработчики не знают друг друга. В этом случае правом на запись в хранилище обладает только один человек. Его работа состоит в сопровождении проекта. Он принимает изменения от окружающих, оценивает их и вносит в хранилище. Здесь появляются две роли:

  • автор – лицо, оформивший изменения;

  • коммитер – лицо, внесший изменения в хранилище.

Коммитера называют интеграционным менеджером, так как его работа сводится к принятии от других изменений в проект. Какие способы использует интеграционный менеджер, чтобы получать/забирать изменения от сторонних разработчиков? Это:

  • применение патчей;

  • интеграция изменений из веток удаленных хранилищ.

Патч – это текстовый файл с описанием коммита. Команда git format-patch создает патч в формате mailbox, который готов для отправки по почте. Команда git format-patch -1 HEAD в текущем каталоге создает файл с патчем из одного коммита, на который указывает HEAD. Получившийся файл (скажем, 0001-Add-arguments-of-main-function.patch) можно применить в другом локальном хранилище командой

git am 0001-Add-arguments-of-main-function.patch

Второй способ приема изменений от разработчиков – это интеграция изменений из веток удаленных хранилищ. В этом случае разработчик, создает копию удаленного хранилища, которым уже имеет полное право распроряжаться по своему желанию. В разработке открытого ПО лицензия позволяет делать это. Далее, он вносит изменения в свое хранилище. После завершения работы он обращается к интеграционному менеджеру с просьбой влить его изменения в официальное хранилище проекта. Эта просьбу называют “pull request” или “запрос на слияние”. Если у интеграционного менеджера нет замечаний по коммитам и работа соответствует его ожиданиям, он забирает изменения из удаленного хранилища в свое локальное хранилище, сливает их и отправляет в официальное хранилище.

../_images/workflow-integration-manager.png

Модель с диктатором и помощниками#

Если открытая программа пользуется популярностью, и желающих вносить в нее изменения много, то интеграционный менеджер не будет справляться со своими обязанностями. В этом случае он призывает к себе нескольких помощников. Каждый помощник ответственен за конкретный модуль и принимает изменения только по нему. Подготовленные изменения они передают сопровождающему проекта, который уже их отправляет в официальное хранилище. Сопровождающего проекта называют диктатором. В результате получившаяся модель взаимодействия называется “моделью с диктатором и помощниками”.

../_images/workflow-dictator.png