
Всем привет. В этом уроке мы рассмотрим как автоматизировать workflow, который мы с вами разобрали в прошлом уроке. Руками создавать фичи, хотфиксы и релизы каждый день достаточно долго, а действия всегда одни и те же. Поэтому существует много всяких возможностей сделать это более удобным.
В этом уроке мы с вами разберем что такое gitflow. Для установки gitflow на мак нужно всего лишь написать
brew install git-flow
Так как он у меня уже установлен, то я его устанавливать не буду. Про установку на других операционках можно почитать в оффициальной репе. В разделе Installation instruction написано как устанавливать его на все операционки.
Теперь нам нужно инициализировать gitflow в нашем репозитории.
Для этого напишем
git flow init
И нам задают тут вопросы как мы хотим назвать мастер, девелоп, хотфикс и релиз ветки. Можно смело нажимать enter в ответ на все вопросы. Вопросы закончились и теперь у нас инициализирован gitflow.
Теперь давайте создадим новую фичу, как мы делали в прошлом уроке.
git flow feature start implement-registration
Как мы видим сразу произошло очень много. У нас создалась новая ветка feature/implement-registration. Нам не нужно указывать приставку feature, так как она добавляется автоматически. И оно нам перекинуло на созданую ветку. И когда мы закончим работать с этой веткой нам нужно написать git flow feature finish.
Теперь cделаем какие-то изменения. Создадим файл register.js и добавим туда какую-нибудь функцию.
function register(login, password) {
return 'Account:' + ' ' + login + '' + ' ' + password + ' ' + 'was created';
}
Теперь закоммитим наши изменения.
git add .
git commit -m "Added register"
И пишем, что хотим закончить фичу
git flow feature finish implement-register
Эта команда автоматически мерджит фичу в develop, удаляет старую ветку и переключается на develop. И все это в одну команду.
Если мы посмотрим git log, то мы увидим, что наш коммит добавился.
Теперь давайте создадим релиз, как мы делали в прошлом уроке.
git flow release start 1.1
Оно нам говорит, что у нас есть ветка релиза 1.0, которая не была нормально завершена. Это потому, что мы ее никак не закрыли и не удалили и она у нас висит с прошлого урока.
Если мы напишем git branch, то увидим, что у нас висит ветка release/1.0. Давайте ее просто удалим
git br -D release/1.0
Теперь если мы попробуем стартануть релиз, должно быть все нормально. Как мы видим, нас перебросило на ветку release/1.1. И оно нам говорит, сделайте необходимые изменения к релизу и когда закончите нажмите finish.
И так как нам не нужно делать никаких изменений пишем
git flow release finish 1.0
Здесь у нас открывается редактор, который говорит "введите сообщение что вы здесь сделали". Потому что это мердж в мастер и девелоп одновременно. Я просто закрываю файл так как месседж уже написан. И вот у нас открылся еще раз редактор. И оно говорит: "Напишите пожалуйста месседж для тега". Давайте напишем просто 1.1. А я расскажу, что такое теги чуть позже.
Что сделала команда finish в этот раз? Она смерджила релиз в мастер и develop, поставил тег 1.1 и удалила ветку. То есть все, что мы делали в несколько команд в прошлом уроке она сделала в одну.
Если мы хотим сделать хотфикс для продакшена то мы пишем
git flow hotfix start 1.1.1
Делаем наш хотфикс. Например удаляем пробелы в файле register.js. Делаем коммит и пишем finish
git add .
git commit -m "Fixed spacing"
git flow hotfix finish 1.1.1
Это мерджит ветку одновременно в мастер и девелоп и удаляет ветку.
И теперь немного о том, что такое теги. Если мы напишем команду
``bash git tag
то мы увидим список созданых тегов. Тег это метка, к которой можно переключаться. Теги обычно используются для маркироки релизов. Каждому релизу присваивается тег и потом можно использовать код конкретно из этого тега и не боятся, что новые изменения затронут тег.
Для создания тегов используется команда
```bash
git tag 1.2
Если мы сейчас напишем git tag, то увидим, что у нас добавился тег 1.2.
Это создало нам метку точно на тот коммит, который был на ветке в тот момент, когда мы написали команду. Теперь если мы напишем
git checkout -b 1.1
Это создаст нам новую ветку с тега. И возьмет последним коммитом, тот, который был последним, когда мы написали эту команду. Теперь абсолютно всегда этот тег 1.2 будет существовать и мы всегда можем создать новую ветку с этого тега.
И последняя команда, которая может быть полезна. По умолчанию, если вы напишете git push, оно пушит только ветки и не пушит теги. Чтобы запушить теги напишем
git push origin --tags
Теперь мы запушили наши теги и видим сообщение, что у нас создалось 3 новых тега, нам они доступны на гитхабе, их можно клонить вместе с репозиторием и их могут использовать другие люди.