#6 Git - Оптимизируем работу с помощью gitflow

poster
В этому уроке мы познакомимся с инструментом gitflow, который помогает упростить работу с ветками в git при создании фич, релизов, хотфиксов. Так же мы разберем, что такое теги в гите и зачем они нужны.
Понравилось? Поделитесь с друзьями!
Понравилось?
Поделитесь с друзьями!
Комментарии
Текст видео

Всем привет. В этом уроке мы рассмотрим как автоматизировать 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 новых тега, нам они доступны на гитхабе, их можно клонить вместе с репозиторием и их могут использовать другие люди.

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
Serafim
1год назад назад
Добрый вечер, может подскажете, я ввожу на моем проекте git status а оно мне пишет - fatal: bad object HEAD . Что это может значить? Спасибо.
monsterlessons
1год назад назад
Добрый вечер. Ваш репозиторий поврежден либо коммита, на который ссылается HEAD не существует. Лучше сделайте новый clone, если пушили репозиторий в remote.