Git, Gitflow и ветка develop. Продолжаем разбираться в основах программирования

e682f21ed23f92cf2cf2de5ab81f00b2.png

Привет, Хабр! В блоге beeline cloud я делюсь личным опытом разработки. Ранее рассказывал, как инжектить в статические поля, как упростить себе жизнь при написании тестов, подсвечивал особенности пагинации. А сегодня продолжу знакомить вас с Git, Gitflow и веткой develop. Если вы пропустили первую статью из цикла — рекомендую прочитать тут.

full rest приложение на spring boot

Предлагаю разогнать воображение — представим, что у нас появилось требование для реализации определенного функционала. Допустим, нам нужно реализовать full rest приложение на spring boot. Как мы поняли из текста выше ветку master для разработки использовать нельзя. Для этого существуют другие.

А вот основная ветка для разработки в Gitflow обычно так и называется — develop. Она содержит код, который находится в разработке и не готов к выпуску.

И если вы разработчик, который работает над новыми функциями или исправляет ошибки в проекте — она будет для вас основной. Такая ветка позволяет создавать новые изменения, тестировать их и интегрировать в проект постепенно.

Gitflow рекомендует использовать ветку develop для следующих целей:

 •         Разработка новых функций

•         Исправление ошибок

•         Тестирование и отладка кода

 Когда изменения в ветке develop готовы к выпуску, они могут быть merge-ены в ветку master, чтобы обеспечить стабильность и надежность проекта.

Как создать ветку develop

Тут все просто — нужно выполнить следующую команду:  

$ git checkout -b develop

Также вы можете создать ветку в одном из сервисов, описанных выше.

Для этого открываем ветки и нажимаем »+» напротив той ветки, из которой мы хотим создать ветку develop.

2d2db1296cd894b653c3a3fd3e504b3f.png

Вводим название ветки и нажимаем на кнопку создать:

28bc9edaf653d51db84ccc4b7ad949fe.png

Теперь у нас есть две ветки, основная master для стабильного продукта и develop для разработки:

ffea017e67f6a9cacffff5fe3e75a04b.png

Скриншоты сделаны на сайте https://gitverse.ru/ , но процесс создания через сервис идентичен и на других подобных сервисах, например на https://bitbucket.org/ . 

 Если вы ранее уже выполняли создание ветки в сервисе, то вам следует локально в папке проекта переключиться на ветку develop. Для этого нужно выполнить команду:

$ git fetch && git checkout develop 

 Впрочем для разработки простого сервиса, если им занимается один разработчик Иван, этих двух веток будет достаточно.

Вносим изменения в проект

Представим, что у нас новое требование: необходимо реализовать эндпоинт GET /api/hello, который будет возвращать ответ в JSON:

 ```json
{
"answer”: "Hello, world”
}
```

 Реализовав текущий функционал, мы должны зафиксировать все изменения и залить их в удаленный репозиторий. Для этого выполняем следующие команды последовательно:

 Индексируем изменения, которые были внесены

$ git add

 Коммитим

$ git commit -m "add /api/hello endpoint”

 Заливем в удаленный репозиторий

$ git push

 Залив код в репозиторий, у нас получится следующая картинка в IDE IDEA:

05794dd9d2369f8a3e61df9ed9b9aa62.png

Эти изменения можно увидеть в веб-браузере при использовании одного из удаленных репозиториев (на скрине https://gitverse.ru/):

ee8ca7a259b7f282a98d913a94d67a06.png

Далее перенесем все изменения в master. Это можно сделать путем создания запроса на слияние. По-другому он называется merge request или pull request:

d04f8f98421989030cf4658757a10eb0.png

И этот запрос на слияние можно подтверждать, в итоге получив такой результат:

de0d665ef30cf54635b8a25237543759.png

 Теперь все изменения находятся в ветке master.

Разработчиков много, изменений тоже. Что делать?

Когда в команде работает несколько разработчиков, и каждый из них вносит какое-либо изменение, применять их все в одной ветке становится неудобно. Например, изменения из ветки develop должны попадать на сервер тестирования и в этой ветке не должно быть изменений, которые еще не завершены либо находятся в разработке. Для этого в Gitflow принят стандарт веток под названием feature. 

 Ветка feature — временная ветка в Gitflow, используется для следующих целей:

 •         Разработка новой функции

•         Исправление ошибок

•         Тестирование и отладка кода

Иными словами, ветка feature используется для разработки конкретной функции или исправления ошибки. Она позволяет работать над функцией независимо от других изменений в проекте. И содержит только те изменения, которые связаны с конкретно функцией или исправлением ошибки.  

А вот после, когда вы закончите разработку функции или исправления ошибки, эти изменения попадают в ветку develop, чтобы они были включены в основной поток разработки и были доступны другим участникам команды.

Как использовать ветку feature

Gitflow рекомендует использовать ветку feature следующим образом:

 •         Создание временной ветки для разработки новой функции или исправления ошибки.

•         Разработка и тестирование изменений в этой ветке.

•         Merge изменений в ветку develop, чтобы они были включены в основной поток разработки.

Hello, Маша, или как работать над разными фичами

Теперь представим, что к нашей команде присоединилась разработчик Маша. Вместе с Иваном они должны одновременно работать над двумя разными фичами. Каждый из них создал для себя по ветке:

 $ git checkout -b feature/ivan_feature develop

У Маши пока нет локального репозитория, поэтому она клонирует его себе. Сделать это можно командой, которая указана в самом Git-сервисе:

8adde0752c4a1f86212afe6491218dbb.png

А дальше создает новую ветку:  

$ git checkout -b feature/masha_feature develop

Этой командой можно создать ветку из develop и сразу на нее переключиться.

 Аналогичное можно сделать через веб-интерфейс Git-сервиса, который вы используете, как описано выше, когда мы создавали ветку develop из master.

bcafcd2acc519d093708246c8d81d786.png

 Но тут выясняется, что Ивану требуется доработать сервис, так чтобы по созданному им эндпоинту /api/hello отдавать имя пользователя, которое передается в параметре URL «name».

 При этом Маше нужно создать вторую версию эндпоинта /api/v2/hello, который должен отдавать приветствие и вопрос в JSON. 

```json
{
"answer”: "Hello my name is bot”
"question”: "How can I help you?”
}
```

Когда код готов, разработчики заливают его в git-репозиторий и создают merge request в ветку develop по аналогии с запросом на слияние, который мы делали выше, когда создавали запрос на слияние из develop в master. После слияния код попадает в основной поток разработки — он доступен остальным участникам проекта.

Когда оба разработчика закончат свои задачи и их код попадет в ветку develop, он будет доступен каждому из разработчиков. Но если же код Ивана попадет в ветку develop раньше, тестировщики могут начать тестировать этот код, не дожидаясь доработок, которые выпустит Маша. Доработки Маши находятся в отдельной ветке и на стабильность кода, который находится в ветке develop, не повлияет.

На этом у меня все. В этой части мы погрузились в командную разработку. В следующей статье научимся выводить код, состоящий из доработок всех наших разработчиков, разберемся в релизах, а также поймем, что делать, если разработчики внесли доработки в один и тот же файл и при слиянии поймали конфликт.

beeline cloud — secure cloud provider. Разрабатываем облачные решения, чтобы вы предоставляли клиентам лучшие сервисы.

© Habrahabr.ru