191 документ
← К списку

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

страница

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

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

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

Для создания примера использованы 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 проект Василия, нажмите Слить (merge) в контекстном меню на коммите, на который указывает ветка feature/feature;

    3. 1C:EDT покажет диалог настройки параметров слияния. В нем ничего менять не нужно, нажмите Слить;

    4. 1C:EDT покажет вам результат слияния — была выполнена перемотка вперед;

    5. В панели История вы видите, что указатель локальной ветки master переместился вперед и теперь обе локальные ветки совпадают;

  7. Теперь осталось последнее действие — отправить изменения ветки master на сервер. В панели Навигатор нажмите Групповая разработка > Отправить в Upstream в контекстном меню проекта;

  8. 1C:EDT покажет вам результат отправки изменений. Результат будет отрицательный. Отправка изменений из локальной ветки master в удаленную ветку master отклонена;

    Это ожидаемый результат. Как вы, возможно, знаете из примера Исправить ошибку в основной ветке удаленного репозитория, так как на сервере появились изменения другого разработчика, сначала нужно объединить их локально со своими изменениями, а затем уже отправлять на сервер;

  9. Получите изменения с сервера и слейте их со своей локальной веткой master. Для этого в панели Навигатор нажмите Групповая разработка > Получить и слить (pull) в контекстном меню проекта;

  10. 1C:EDT покажет вам результат получения и слияния изменений. С сервера, из удаленной ветки origin/master, был получен 2 коммит Андрея и он был успешно объединен с 5 коммитом Василия. В результате был создан коммит слияния.

  11. В панели История вы видите, что 1C:EDT получила с сервера коммит Андрея (2 коммит) и в ветке удаленного отслеживания отметила (origin/master) что именно на нем находится ветка master в удаленном репозитории. Затем 1C:EDT влила этот коммит в локальную ветку и создала новый коммит — коммит слияния, который стал головой локальной ветки master;

  12. Теперь локальную ветку master можно отправить на сервер. В панели Навигатор нажмите Групповая разработка > Отправить в Upstream в контекстном меню проекта;

  13. 1C:EDT покажет вам результат отправки изменений. Из локальной ветки master в удаленную ветку master были успешно переданы два коммита: 3 коммита Василия и коммит слияния, который был создан в результате объединения с изменениями Андрея;

  14. В панели История вы видите, что удаленная ветка master указывает на тот же коммит, что и локальная ветка. Значит все коммиты были переданы на сервер и сейчас история локального репозитория совпадает с историей удаленного репозитория. А ветку feature/feature можно удалить, поскольку все ее изменения есть в основной ветке;

  15. Если посмотреть на схему работы, то выполненный пример выглядит следующим образом:

    Василий влил ветку feature/feature в ветку master, затем с сервера притянул изменения в ветку master, объединил их и отправил на сервер.

  16. Аналогичного результата можно было бы добиться и в другой последовательности: сначала притянуть в ветку master изменения с сервера, а затем влить в нее свою ветку feature/feature. На схеме это выглядело бы следующим образом, а в панели История все выглядело бы точно так же.

На уровень выше: Примеры работы