Вы должны посмотреть на git-flow . Это отличная (и популярная) модель ветвления.
Git Flow Summary
разветвление
Основными стволами, которые остаются навсегда, являются develop
и master
. master
содержит ваш последний выпуск и develop
вашу последнюю "стабильную" версию для разработки.
Участники создают feature
ветки (с префиксом feature/
по соглашению) из develop
:
$ git checkout -b feature/my-feature develop
и hotfix
ветви (с префиксом hotfix/
по соглашению) от master
:
# hotfix the latest version of master
$ git checkout -b hotfix/hotfix-version-number master
# or hotfix from a specific version
$ git checkout -b hotfix/hotfix-version-number <starting-tag-name>
Эти ветви являются «одноразовыми», что означает, что они имеют короткий срок службы, прежде чем они будут объединены с основными стволами. Они предназначены для инкапсуляции небольших функциональных возможностей.
Отделочные Отрасли
Когда участник делает feature
ветку, он объединяет ее в develop
:
$ git checkout develop
$ git merge --no-ff feature/my-feature
$ git branch -d feature/my-feature
Когда они завершают работу с hotfix
веткой, они объединяют ее обратно в обе части, master
и develop
исправление переносится вперед:
$ git checkout master
$ git merge --no-ff hotfix/hotfix-version-number
$ git checkout develop
$ git merge --no-ff hotfix/hotfix-version-number
$ git branch -d hotfix/hotfix-version-number
Это аспект непрерывной интеграции.
релизы
Когда вы готовы начать упаковку релиза, вы создаете release
ветку из вашей «стабильной» develop
ветки (так же, как и создание feature
веток). Затем вы врезаете номер версии в тег (описано ниже).
Использование отдельных release
веток позволяет вам продолжать разработку новых функций, develop
пока вы исправляете ошибки и добавляете последние штрихи к release
ветке.
Когда вы будете готовы закончить выпуск, вы объединяете release
ветку в обе части master
и develop
(точно так же как hotfix
), чтобы все ваши изменения были перенесены.
Tagging
Когда вы создаете release
ветку или hotfix
ветку, вы соответствующим образом увеличиваете номер версии в теге. С ванильным мерзавцем это выглядит так:
$ git tag -a <tag-name> -m <tag-description>
Затем вам также нужно будет вставить теги (отдельно) в ваш удаленный репозиторий:
$ git push --tags
Обычно лучше использовать семантическое управление версиями, в котором ваши версии принимают форму major.minor.hotfix
. Основные неровности несовместимы в обратном направлении, в то время как мелкие неровности и неровности исправлений не являются несовместимыми в обратном направлении (если вы не в бета-версии 0.x.x
).
сращивание
Как вы видели выше, git-flow предлагает вам объединить ветки с помощью следующей команды:
$ git merge --no-ff <branch-name>
--no-ff
Опция позволяет сохранить все истории филиала , не оставляя кучу веток , лежащих вокруг в токе фиксации хранилища (так не беспокойтесь, вы не будете иметь отделение для каждой версии).
Вам также рекомендуется тянуть с
$ git pull --rebase
Таким образом, вы не добавляете много бесполезных коммитов слияния.
Вы можете настроить git для выполнения обеих этих функций по умолчанию в вашем .gitconfig
. Я позволю тебе посмотреть это хотя;)
Просмотр версий
Когда кто-то ищет конкретную версию вашей кодовой базы, он может проверить тег по имени:
# checkout in detached HEAD to browse
$ git checkout <tag-name>
# OR checkout and create a new local branch (as you might for a hotfix)
$ git checkout -b <new-branch-name> <tag-name>
Или, если кто-то просматривает сайт на github, в раскрывающемся списке «ветки» также есть вкладка «Теги».
Использование расширения git-flow (рекомендуется)
Мой любимый способ использовать эту модель с расширением git flow для git.
( Правка: Луи порекомендовал вилку AVH, которая работает лучше git describe
и может быть более активной сейчас. Спасибо Луи.)
Расширение автоматизирует все беспорядочные части (например, использование merge --no-ff
и удаление веток после слияния), чтобы вы могли продолжить свою жизнь.
Например, с расширением вы можете создать функциональную ветку следующим образом:
$ git flow feature start my-feature-name
и закончить это так
$ git flow feature finish my-feature-name
Команды для исправлений и выпусков аналогичны, хотя вместо имени ветви они используют номер версии, например:
# Create hotfix number 14 for this minor version.
$ git flow hotfix start 2.4.14
# Create the next release
$ git flow release start 2.5.0
Затем Git flow создает для вас тег версии и любезно напоминает вам о необходимости повысить версию в любых файлах конфигурации или манифеста (что вы можете сделать с помощью менеджера задач, такого как grunt).
Надеюсь, это поможет :) Я не уверен, как именно вы интегрируете все это с вашей настройкой Travis CI, но я предполагаю, что хитрости доставят вас туда.