Сделать проект в тематической ветке и влить его в основную ветку удаленного репозитория

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

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

Для создания примера использованы 1C:EDT 2024.1.1 и «1С:Предприятие» 8.3.25.1394.

Выполните подготовительные действия

  1. Зарегистрируйтесь на сайте GitHub;
  2. Получите токен доступа;
  3. Создайте копию (fork) репозитория https://github.com/1C-Company/dt-demo-configuration;
  4. Запустите 1C:EDT Start;
  5. Создайте два новых проекта: ПроектАндрей и ПроектВасилий;
Для каждого из этих проектов:
  1. Запустите проект;
  2. Нажмите Начать работу;
  3. Импортируйте проект из своей копии (fork) (возможна ошибка). При импорте используйте токен вместо пароля, иначе вы не сможете отправлять свои изменения в репозиторий на GitHub;
Настройте параметры Git, чтобы видеть, кто из разработчиков внес изменения
  1. Нажмите Окно > Параметры... в главном меню;
  2. Перейдите на страницу Групповая разработка > Git > Конфигурация;
  3. Откройте вкладку Настройки репозитория;
  4. Добавьте две записи (Добавить запись):
    1. В проекте ПроектАндрей:
      user.name — Андрей
      user.email — Андрей@server.example.com
    2. В проекте ПроектВасилий:
      user.name — Василий
      user.email — Василий@server.example.com
  5. Нажмите Применить и закрыть;
Настройте рабочее пространство
  1. Откройте панель История. Для этого в панели Навигатор нажмите Групповая разработка > Показать Историю в контекстном меню проекта. Панель История всплывет в правом верхнем углу;
  2. Нажмите на значок Восстановить — панель История зафиксируется в нижней части экрана;
  3. В командной панели отожмите кнопку (Связать с редактором), чтобы панель показывала все коммиты, независимо от того, что выделено в панели Навигатор;
  4. Нажмите (Change the File Scope for the History) и выберите вариант фильтрации Все изменения в репозитории, чтобы панель показывала все коммиты;
  5. Нажмите (Change which commits to show) и установите флажок refs/heads/**, чтобы видеть все локальные ветки репозитория.
Смоделируйте работу Андрея
  1. Перейдите в ПроектАндрей;
  2. Добавьте константу в проект DemoConfDT;
  3. Зафиксируйте изменения:
    1. В панели Индексирование Git напишите сообщение коммита: 2 коммит;
    2. Нажмите Фиксировать и отправить... чтобы зафиксировать изменения и сразу отправить их в удаленный репозиторий;
  4. Закройте ПроектАндрей и перейдите в ПроектВасилий.

Выполните пример

  1. Задача Василия заключается в том, чтобы создать тематическую ветку feature, сделать в ней свой небольшой проект (добавить справочник, документ и перечисление, для примера), а затем влить эти изменения в основную ветку и отправить на сервер. Если бы Андрей ничего не делал, то схема работы Василия выглядела бы следующим образом:
    Однако проблема заключается в том, что, пока Василий раздумывал над своим проектом, Андрей исправил небольшую ошибку прямо в основной ветке master. Теперь на сервере есть изменения Андрея, которых нет у Василия.
    В примере вы увидите, каким образом Василий может передать свои изменения в основную ветку на сервер;
  2. Создайте новую ветку от ветки master и переключитесь на нее (возможная проблема). Для этого:
    1. В панели Навигатор нажмите Групповая разработка Создать новую ветку... в контекстном меню проекта;
    2. Выберите:
      1. Тип веткиFeature;
      2. Имя веткиfeature;
      3. Информационная база для разработкиСоздать новую пустую информационную базу;
      4. Нажмите Готово;
    3. После того, как новая ветка будет создана, 1C:EDT переключит проект на нее. Об этом говорит заголовок проекта;
      Кроме этого 1C:EDT откроет панель Разработка, в которой вы увидите новую ветку разработки и новую информационную базу;
  3. Сделайте небольшой проект Василия. Он, для примера, будет состоять из трех коммитов. Сначала вы добавите справочник, затем документ и в конце - перечисление;
    1. Добавьте справочник в проект DemoConfDT;
    2. Зафиксируйте изменения:
      1. В панели Индексирование Git напишите сообщение коммита: 3 коммит;
      2. Нажмите Фиксировать чтобы зафиксировать изменения в локальном репозитории;
  4. В панели История вы видите, что в текущей локальной ветке feature/feature появился новый коммит Василия, который стал головой ветки. Локальная ветка master и соответствующая ей серверная ветка origin/master остались без изменений;
  5. Аналогичным образом добавьте в проект документ (с коммитом "4 коммит") и перечисление (с коммитом "5 коммит"). В панели История вы увидите следующее;
  6. На этом маленький проект Василия завершен. Он хочет влить его в ветку master и отправить на сервер;
    1. Сначала нужно переключиться на локальную ветку master. Для этого в панели История нажмите Извлечь в контекстном меню на коммите, на который указывает ветка master. 1C:EDT спросит, какую именно ветку вы хотите извлечь (т.к. на этот коммит указывают две ветки). Выберите локальную ветку master и нажмите Checkout;
    2. Чтобы влить в текущую ветку master проект Василия, нажмите Слить в контекстном меню на коммите, на который указывает ветка feature/feature;
    3. 1C:EDT покажет диалог настройки параметров слияния. В нем ничего менять не нужно, нажмите Слить;
    4. 1C:EDT покажет вам результат слияния — была выполнена перемотка вперед;
    5. В панели История вы видите, что указатель локальной ветки master переместился вперед и теперь обе локальные ветки совпадают;
  7. Теперь осталось последнее действие — отправить изменения ветки master на сервер. В панели Навигатор нажмите Групповая разработка > Push to origin в контекстном меню проекта;
  8. 1C:EDT покажет вам результат отправки изменений. Результат будет отрицательный. Отправка изменений из локальной ветки master в удаленную ветку master отклонена;
    Это ожидаемый результат. Как вы, возможно, знаете из примера Исправить ошибку в основной ветке удаленного репозитория, так как на сервере появились изменения другого разработчика, сначала нужно объединить их локально со своими изменениями, а затем уже отправлять на сервер;
  9. Получите изменения с сервера и слейте их со своей локальной веткой master. Для этого в панели Навигатор нажмите Групповая разработка > Получить и слить в контекстном меню проекта;
  10. 1C:EDT покажет вам результат получения и слияния изменений. С сервера, из удаленной ветки origin/master, был получен 2 коммит Андрея и он был успешно объединен с 5 коммитом Василия. В результате был создан коммит слияния.
  11. В панели История вы видите, что 1C:EDT получила с сервера коммит Андрея (2 коммит) и в ветке удаленного отслеживания отметила (origin/master) что именно на нем находится ветка master в удаленном репозитории. Затем 1C:EDT влила этот коммит в локальную ветку и создала новый коммит — коммит слияния, который стал головой локальной ветки master;
  12. Теперь локальную ветку master можно отправить на сервер. В панели Навигатор нажмите Групповая разработка > Push to origin в контекстном меню проекта;
  13. 1C:EDT покажет вам результат отправки изменений. Из локальной ветки master в удаленную ветку master были успешно переданы два коммита: 3 коммита Василия и коммит слияния, который был создан в результате объединения с изменениями Андрея;
  14. В панели История вы видите, что удаленная ветка master указывает на тот же коммит, что и локальная ветка. Значит все коммиты были переданы на сервер и сейчас история локального репозитория совпадает с историей удаленного репозитория. А ветку feature/feature можно удалить, поскольку все ее изменения есть в основной ветке;
  15. Если посмотреть на схему работы, то выполненный пример выглядит следующим образом:
    Василий влил ветку feature/feature в ветку master, затем с сервера притянул изменения в ветку master, объединил их и отправил на сервер.
  16. Аналогичного результата можно было бы добиться и в другой последовательности: сначала притянуть в ветку master изменения с сервера, а затем влить в нее свою ветку feature/feature. На схеме это выглядело бы следующим образом, а в панели История все выглядело бы точно так же.