Глава 13 Заключение

Теперь вы умеете создавать и объединять ветки — это одни из ключевых функций Git, особенно при совместной работе. Благодаря простоте работы с ветками, рекомендуется создавать их чаще. Чем меньше в ветке изменений, тем проще ее слить, и тем ниже вероятность конфликтов из-за одновременных правок одной и той же части проекта. Это отражает известную идею, что при работе в команде лучше синхронизироваться чаще.

Рассмотрим продвинутые способы использования веток, а также для чего их использовать не стоит.

Для начала уточним, что можно создать ветку от любой другой, а не только от основной ветки main. Уровень вложенности и количество веток не ограничены. После слияния ветки она не прекращает свое существование — в ней можно продолжить работу, а после слить еще раз. На практике вам вряд ли понадобится больше 3-х уровней вложенности, а ветки лучше периодически удалять, чтобы не запутаться.

13.1 Тематические ветки (feature branch)

Тематическая ветка содержит изменения, связанные с конкретной задачей или направлением работы. Это может быть новый этап анализа или изменения в уже сделанные этапы, например:

  • ветка в которой мы визуализировали данные при помощи графиков, может называться visualize или plot;
  • ветка в которой добавляются модели, может называться model или, если это более специфическая модель, например нелинейная, то model-nle;
  • ветка в которой обновлены данные для уже выполненного анализа update-data;
  • в нашем репозитории, когда мы заменили график на ящик с усами, ветка называлась boxplot.

Если в проекте используется трекер задач или ошибок, то зачастую работа выполняется в отдельной ветке с названием соответствующим номеру из трекера, например issue42 или ticket58.

Это самый частый способ использования веток, применяемый независимо от размеров проекта и количества участников.

13.2 Долгоживущие ветки (long-running branches)

Этот подход часто применяется для крупных проектов, когда нужно обеспечить высокую стабильность продукта, как правило при разработке программного обеспечения.

Ветка main содержит стабильную версию. От нее создается ветка develop в которой ведется разработка. Тематические ветки создаются от ветки develop и вливаются в нее. Когда разработка очередной версии завершилась, изменения из ветки develop стабилизируются — проходят тестирование и ревью, после чего вливаются в стабильную ветку main.

Далее цикл повторяется — разработка следующей версии продолжается в ветке develop с использованием тематических веток, после чего она снова сливается с веткой main.

13.3 Когда не стоит использовать ветки

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

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

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

Другая частая ошибка — участники создают ветки с собственным именем (ivan, masha-work) и используют их как личные папки для хранения своих файлов не связанных с файлами других участников. Ветки предназначены для внесения изменений в один общий проект. Следует либо интегрировать эти файлы в проект, возможно отдельной веткой, либо хранить в другом месте.

В следующей части мы посмотрим как организовать совместную работу при помощи «удаленных» (remote) веток и сервиса GitHub.