Зачем нам workflow для работы с git?

Чтобы ответить на поставленный вопрос, нам нужно понять:

Благодаря своей распределённой природе git позволяет очень гибко организовывать работу разрозненных команд. В то же время такая гибкость может привести ко множеству ошибок интеграции нового кода в основную ветвь разработки и «выпуску релиза» нашего продукта.

Первое, что предлагает нам git — возможность работы со своим «форком», забирая данные из одного удалённого репозитория и отправляя в другой. Базовые схемы организации такой работы описаны в «Pro Git».

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

А зачем нам разбираться с историей? #

С историей разработки нужно уметь обращаться для лучшего понимания того, как использовать наш код нам самим и внешним потребителям. В частности, чтобы ответить на вопросы:

Workflow позволяет ответить на них заранее.

git-flow #

Попытку описать процессы формирования релиза и ответа на похожие вопросы сделал Vincent Driessen в своей статье «A successful Git branching model» и по-русски «Удачная модель ветвления для Git».

В этой статье основной упор делается на решении задач:

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

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

Не говоря уже о том, что описанный процесс для других команд вообще показался достаточно «длинным» и не удовлетворяющим их требованиям. Например, ребятам из GitHub.

GitHub flow #

Хотя git-flow покрывал большую часть задач, GitHub'овцы не могли его использовать из-за своего подхода к «доставке фич в продакшен».

В их подходе делается упор на следующие задачи:

Тоесть они реализуют идеи Continuous integration и Continuous deployment для своего процесса.

С критикой git-flow и описанием подхода GitHub можно ознакомиться в статье «Issues with git-flow»

My flow? #

Вообще, для каждой команды разработчиков может быть разработан свой метод менеджмента кода. Главное, чтобы этот метод отвечал на требования, поставленные к нему командой.

Ну, а для полноценного «ведения» своего репозитория нужно понимать возможности системы контроля версий, в частности, различия таких команд как git rebase и git merge, когда и как они применяются.

В интернете есть много статей по поводу ведения проектов в git и использования git rebase, git merge, ну и git cherry-pick. Например, статья «Changing history, or How to Git pretty» наглядно показывает, что стоит делать со своей историей, а чего делать не стоит.

Дополнительные ссылки #

07 февраль 2013