В заметке «Git workflow для вашего проекта» я сделал вольное изложение статьи
“A successful Git branching model”, в которой описывается правильный способ использования git для выпуска релизов и хотфиксов.
Под катом — такой же вольный перевод другой статьи «Why aren’t you using git-flow?», рассказывающей о том, как можно сильно упростить себе жизнь, если для описанных операций использовать утилиту git-flow.
git-flow — это расширение команд git.
Вы можете загрузить его здесь: https://github.com/nvie/gitflow, или установить готовый пакет (на Debian: apt-get install git-flow
)
После установки git-flow
вы можете создать новый репозиторий или преобразовать существующий к новой структуре ветвления командой
$ git flow init
Команда задаст несколько вопросов, но вам, скорее всего, подойдут значения по умолчанию:
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
После того как вы ответите на вопросы, веткой по умолчанию в проекте станет develop
— в ней вы и будете работать.
Теперь просто используйте Git как обычно, но вносите непосредственно в ветку develop
только небольшие изменения. Если вы вознамеритесь сделать что-то грандиозное, просто создайте на основе develop
ветку-feature.
Например, вы хотите создать страницу логина:
$ git flow feature start login
Команда создаст новую ветку с именем feature/login
, основанную на develop
и переключит вас на нее. Теперь творите, делайте коммиты, а когда закончите работу — закройте ветку:
$ git flow feature finish login
Ветка feature/login
будет влита (merge) обратно в develop
и после этого удалена.
Когда захотите выпустить новый релиз, создайте ветку релиза — также на основе develop
. Ветка релиза получит новый номер версии и вы сможете в ней исправить последние ошибки перед публикацией:
$ git flow release start v0.1.0
Когда вы закроете ветку (finish), она вольется и в master
и в develop, так, что master
и develop
будут в этот момент синхронизированы.
И еще одна удобная возможность git-flow
— это обработка хотфиксов. Вы открываете и закрываете хотфиксы так же как и любые другие ветки, но они будут основаны на master:
$ git flow hotfix start somebug
Используя хотфикс вы можете быстро исправить то, что не работает в текущем релизе и при закрытии (finish) ветки результат вольется одновременно и в master
и в develop.
Ну не круто ли? Чего же вы ждете? ;)