Обычно для реализации новой функциональности создают тематические ветки. Это позволяет
сохранить основную ветку разработки в исправном состоянии, готовой к выпуску. В
тематической ветке можно спокойно изменять приложение, тестировать доработки, а когда
все будет проверено — влить эти изменения в основную ветку.
В этом примере вы смоделируете работу двух разработчиков с удаленным репозиторием. Один
из них исправляет небольшую ошибку прямо в основной ветке, а другой выполняет проект в
тематической ветке и отправляет свои изменения в основную ветку на сервер.
Для создания примера использованы 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, чтобы видеть, кто из
разработчиков внес изменения
-
- Нажмите в главном меню;
- Перейдите на страницу ;
- Откройте вкладку Настройки
репозитория;
- Добавьте две записи (Добавить
запись):
- В проекте
ПроектАндрей:
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 проект Василия, нажмите Слить в
контекстном меню на коммите, на который указывает ветка
feature/feature;
- 1C:EDT покажет диалог настройки параметров слияния. В нем ничего менять
не нужно, нажмите Слить;
- 1C:EDT покажет вам результат слияния — была выполнена перемотка
вперед;
- В панели История вы
видите, что указатель локальной ветки master переместился вперед
и теперь обе локальные ветки совпадают;
- Теперь осталось последнее действие — отправить изменения ветки
master на сервер. В панели Навигатор нажмите в контекстном меню проекта;
- 1C:EDT покажет вам результат отправки изменений. Результат будет отрицательный.
Отправка изменений из локальной ветки master в удаленную
ветку master отклонена;
- Получите изменения с сервера и слейте их со своей локальной веткой
master. Для этого в панели Навигатор нажмите в контекстном меню проекта;
- 1C:EDT покажет вам результат получения и слияния изменений. С сервера, из
удаленной ветки origin/master, был получен 2 коммит Андрея и он был успешно
объединен с 5 коммитом Василия. В результате был создан коммит
слияния.
- В панели История вы видите,
что 1C:EDT получила с сервера коммит Андрея (2 коммит) и в ветке удаленного
отслеживания отметила (origin/master) что именно на нем находится ветка
master в удаленном репозитории. Затем 1C:EDT влила
этот коммит в локальную ветку и создала новый коммит — коммит слияния, который
стал головой локальной ветки master;
- Теперь локальную ветку master можно отправить на сервер.
В панели Навигатор нажмите в контекстном меню проекта;
- 1C:EDT покажет вам результат отправки изменений. Из локальной ветки
master в удаленную ветку
master были успешно переданы два коммита: 3 коммита
Василия и коммит слияния, который был создан в результате объединения с
изменениями Андрея;
- В панели История вы видите,
что удаленная ветка master указывает на тот же коммит, что и локальная
ветка. Значит все коммиты были переданы на сервер и сейчас история локального
репозитория совпадает с историей удаленного репозитория. А ветку
feature/feature можно удалить, поскольку все ее
изменения есть в основной ветке;
- Если посмотреть на схему работы, то выполненный пример выглядит следующим
образом:
Василий влил ветку feature/feature в
ветку master, затем с сервера притянул изменения в
ветку master, объединил их и отправил на
сервер.
- Аналогичного результата можно было бы добиться и в другой последовательности:
сначала притянуть в ветку master изменения с сервера, а
затем влить в нее свою ветку feature/feature. На схеме
это выглядело бы следующим образом, а в панели История все выглядело бы точно так
же.