Ви повинні подивитися на git-flow . Це відмінна (і популярна) модель розгалуження.
Підсумок потоку Git
Відгалуження
Головні стовбури, які назавжди залишаються навколо, є 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
), так що всі ваші зміни продовжуватимуться вперед.
Позначення тегами
Під час створення release
філії чи hotfix
гілки ви збігаєте номер версії відповідно до тегу. З ванільним git, це виглядає приблизно так:
$ 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 для 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, але я здогадуюсь, що туди потраплять гейшоки.