Если вы все еще создаете ветки вручную (git branch new-feature), либо не используете их вообще (что еще печальней :)), советую присмотреться к небольшой надстройке над git - git-flow. Данный инструмент значительно упростит и сделает понятной работу для всех участников репозитория, даже если вы работаете над проектом в одиночку, он позволит вести вполне стандартную модель веток (master + develop) и поддерживать семантического версионирование релизов.Что же делает git-flow? Основная задача, это сопровождение трех типа веток проекта. А именно:
master - главная ветвь для релизов
develop или dev - главная ветвь разработки
feature/* - ветви с новыми функциями, которые потенциально будут слиты в dev
hotfix/* - ветви хотфиксов master
support/* - ветки поддержки
По сути git-flow представляет из себя cli надстройку над git которая создает, сливает, пушит и теггирует ветви просто предоставив одну команду вместо нескольких git команд.
Установим данный инструмент, и рассмотрим простой пример его использования.
Для пользователей ubuntu:
Для mac-ов:
Для пользователей Windows (через cygwin):
Если установка прошла успешно, попробуйте ввести "git flow", ниже должно вывестись список доступных команд:
Создадим тестовый репозиторий, и попробуем использовать некоторые преимущества git flow.
На данном этапе нам нужно инициировать конфигурацию git-flow. Процесс инициализации позволяет задать свои имена для веток назначения, но в нашем случае мы будем использовать стандартные имена (master, develop итд.). Запускаем и вводим везде enter:
Допустим сейчас нам нужно сделать "фичу X" - создадим для этого отдельную ветку командой "git flow feature start X":
В итоге у нас появиться ветка "feature/X". Попробуем внести изменения и зафиксировать их.
Но допустим сейчас появился баг в master ветке, который нужно срочно попроавить. Создадим хотфикс с помощью "git flow hotfix start fixbug":
Таким образом мы создали ветвь "hotfix/fixbug" и перешли на нее:
Поправим условный баг, и зафиксируем изменения:
Далее нам необходимо применить хотфикс (слияние или rebase) к master и develop, чтобы структура проекта осталась целостной. Используем для этого "git flow hotfix finish fixbug":
Что мы получили в итоге (дословно написано выше):
ветка hotfix/fixbug слита в master
хотфиксу назначен тег fixbug
hotfix/fixbug слит в develop
ветка hotfix/fixbug удалена (локально)
репозиторий переключен на develop
Ну разве это не прекрасно :)? Далее, попробуем теперь завершить нашу "фичу X" с помощью "git flow feature finish X":
Что мы получили:
ветка feature/X слита в develop
ветка feature/X удалена (локально)
репозиторий переключен на develop
Похожим образом можно создавать релизы и версионировать их, сделаем релиз 0.0.1. Для этого выполним такую последовательность:
запустим git flow release start 0.0.1
добавим файл с информацией о релизе и зафиксируем изменения
запустим git flow release finish 0.0.1
Получили:
создалась ветка release/0.0.1
мы внесли в нее файл информации релиза (release-0.0.1.txt)
ветка релиза слита в мастер
создан тег 0.0.1
ветка релиза слита в develop
ветка релиза удалена (локально)
репозиторий переведен на develop
Мой вывод: git-flow - отличный инструмент, который позволяет вести чистую модель ветвления в проекте, и упростить работу.
Комментарии