Сделать проект в тематической ветке и влить его в основную ветку удаленного репозитория
страницаСделать проект в тематической ветке и влить его в основную ветку удаленного репозитория
Обычно для реализации новой функциональности создают тематические ветки. Это позволяет сохранить основную ветку разработки в исправном состоянии, готовой к выпуску. В тематической ветке можно спокойно изменять приложение, тестировать доработки, а когда все будет проверено — влить эти изменения в основную ветку.
В этом примере вы смоделируете работу двух разработчиков с удаленным репозиторием. Один из них исправляет небольшую ошибку прямо в основной ветке, а другой выполняет проект в тематической ветке и отправляет свои изменения в основную ветку на сервер.
Для создания примера использованы 1C:EDT 2024.1.1 и «1С:Предприятие» 8.3.25.1394.
Выполните подготовительные действия
- Зарегистрируйтесь на сайте GitHub;
- Получите токен доступа;
- Создайте копию (fork) репозитория https://github.com/1C-Company/dt-demo-configuration;
- Запустите 1C:EDT Start;
- Создайте два новых проекта: ПроектАндрей и ПроектВасилий;
Для каждого из этих проектов:
- Запустите проект;
- Нажмите Начать работу;
- Импортируйте проект из своей копии (fork) (возможна ошибка). При импорте используйте токен вместо пароля, иначе вы не сможете отправлять свои изменения в репозиторий на GitHub;
Настройте параметры Git, чтобы видеть, кто из разработчиков внес изменения
- Нажмите Окно > Параметры... в главном меню;
- Перейдите на страницу Групповая разработка > Git > Конфигурация;
- Откройте вкладку Настройки репозитория;
- Добавьте две записи (Добавить запись):
-
В проекте ПроектАндрей:
user.name — Андрей user.email — Андрей@server.example.com -
В проекте ПроектВасилий:
user.name — Василий user.email — Василий@server.example.com
-
- Нажмите Применить и закрыть;
Настройте рабочее пространство
-
Откройте панель История. Для этого в панели Навигатор нажмите Групповая разработка > Показать Историю в контекстном меню проекта. Панель История всплывет в правом верхнем углу;

-
Нажмите на значок Восстановить — панель История зафиксируется в нижней части экрана;
-
В командной панели отожмите кнопку
(Связать с редактором), чтобы панель показывала все коммиты, независимо от того, что выделено в панели Навигатор;
-
Нажмите
(Change the File Scope for the History) и выберите вариант фильтрации Все изменения в репозитории, чтобы панель показывала все коммиты;
-
Нажмите
(Change which commits to show) и установите флажок refs/heads/**, чтобы видеть все локальные ветки репозитория.
Смоделируйте работу Андрея
- Перейдите в ПроектАндрей;
- Добавьте константу в проект DemoConfDT;
- Зафиксируйте изменения:
- В панели Индексирование Git напишите сообщение коммита: 2 коммит;
- Нажмите Фиксировать и отправить... чтобы зафиксировать изменения и сразу отправить их в удаленный репозиторий;
- Закройте ПроектАндрей и перейдите в ПроектВасилий.
Выполните пример
-
Задача Василия заключается в том, чтобы создать тематическую ветку feature, сделать в ней свой небольшой проект (добавить справочник, документ и перечисление, для примера), а затем влить эти изменения в основную ветку и отправить на сервер. Если бы Андрей ничего не делал, то схема работы Василия выглядела бы следующим образом:

Однако проблема заключается в том, что, пока Василий раздумывал над своим проектом, Андрей исправил небольшую ошибку прямо в основной ветке master. Теперь на сервере есть изменения Андрея, которых нет у Василия.
В примере вы увидите, каким образом Василий может передать свои изменения в основную ветку на сервер;
-
Создайте новую ветку от ветки master и переключитесь на нее (возможная проблема). Для этого:
-
В панели Навигатор нажмите Групповая разработка Создать новую ветку... в контекстном меню проекта;
-
Выберите:
-
Тип ветки — Feature;
-
Имя ветки — feature;
-
Информационная база для разработки — Создать новую пустую информационную базу;
-
Нажмите Готово;

-
-
После того, как новая ветка будет создана, 1C:EDT переключит проект на нее. Об этом говорит заголовок проекта;

Кроме этого 1C:EDT откроет панель Разработка, в которой вы увидите новую ветку разработки и новую информационную базу;

-
-
Сделайте небольшой проект Василия. Он, для примера, будет состоять из трех коммитов. Сначала вы добавите справочник, затем документ и в конце - перечисление;
- Добавьте справочник в проект DemoConfDT;
- Зафиксируйте изменения:
- В панели Индексирование Git напишите сообщение коммита: 3 коммит;
- Нажмите Фиксировать чтобы зафиксировать изменения в локальном репозитории;
-
В панели История вы видите, что в текущей локальной ветке feature/feature появился новый коммит Василия, который стал головой ветки. Локальная ветка master и соответствующая ей серверная ветка origin/master остались без изменений;

-
Аналогичным образом добавьте в проект документ (с коммитом "4 коммит") и перечисление (с коммитом "5 коммит"). В панели История вы увидите следующее;

-
На этом маленький проект Василия завершен. Он хочет влить его в ветку master и отправить на сервер;
-
Сначала нужно переключиться на локальную ветку master. Для этого в панели История нажмите Извлечь в контекстном меню на коммите, на который указывает ветка master. 1C:EDT спросит, какую именно ветку вы хотите извлечь (т.к. на этот коммит указывают две ветки). Выберите локальную ветку master и нажмите Checkout;

-
Чтобы влить в текущую ветку master проект Василия, нажмите Слить (merge) в контекстном меню на коммите, на который указывает ветка feature/feature;
-
1C:EDT покажет диалог настройки параметров слияния. В нем ничего менять не нужно, нажмите Слить;
-
1C:EDT покажет вам результат слияния — была выполнена перемотка вперед;

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

-
-
Теперь осталось последнее действие — отправить изменения ветки master на сервер. В панели Навигатор нажмите Групповая разработка > Отправить в Upstream в контекстном меню проекта;
-
1C:EDT покажет вам результат отправки изменений. Результат будет отрицательный. Отправка изменений из локальной ветки master в удаленную ветку master отклонена;

Это ожидаемый результат. Как вы, возможно, знаете из примера Исправить ошибку в основной ветке удаленного репозитория, так как на сервере появились изменения другого разработчика, сначала нужно объединить их локально со своими изменениями, а затем уже отправлять на сервер;
-
Получите изменения с сервера и слейте их со своей локальной веткой master. Для этого в панели Навигатор нажмите Групповая разработка > Получить и слить (pull) в контекстном меню проекта;
-
1C:EDT покажет вам результат получения и слияния изменений. С сервера, из удаленной ветки origin/master, был получен 2 коммит Андрея и он был успешно объединен с 5 коммитом Василия. В результате был создан коммит слияния.

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

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

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

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

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

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