Исправить ошибку в основной ветке удаленного репозитория
страницаОбычно для исправления ошибок создают тематические ветки, в которых исправление выполняют, тестируют и, если все хорошо, то вливают эту ветку в основную. Однако бывают мелкие исправления, например, описки в интерфейсе, которые заведомо не нарушают работу приложения, выполняются быстро и не требуют дополнительного тестирования. Такие исправления нередко выполняют прямо в основной ветке.
В этом примере вы смоделируете работу двух разработчиков с удаленным репозиторием. Каждый из них исправляет свою небольшую ошибку прямо в основной ветке и отправляет результат на сервер.
Для создания примера использованы 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) и выберите вариант фильтрации Все изменения в репозитории, чтобы панель показывала все коммиты;
Выполните пример
-
Осмотритесь вокруг. Два разработчика, Андрей и Василий, разрабатывают прикладное решение. Оба они подключены к удаленному репозиторию, роль которого выполняет ваша копия (fork) на сайте GitHub. В ходе примера Андрей и Василий исправят по небольшой ошибке прямо в основной ветке разработки master. Поскольку они будут делать это на конкурентной основе, вы увидите, каким образом объединяются между собой изменения разных разработчиков.
-
Василий более опытный, он первым исправляет ошибку. Ошибка заключалась в том, что в проекте не хватало констант:
- Перейдите в ПроектВасилий;
- Добавьте константу в проект DemoConfDT;
- Зафиксируйте изменения:
- В панели Индексирование Git напишите сообщение коммита: 2 коммит;
- Нажмите Фиксировать и отправить... чтобы зафиксировать изменения и сразу отправить их в удаленный репозиторий;
-
1C:EDT покажет вам результат отправки изменений. Из локальной ветки master в удаленную ветку master был успешно передан один коммит;

-
В панели История вы видите, что в текущей локальной ветке master появился новый коммит Василия, который стал головой ветки, и этот же коммит есть на сервере и на него указывает удаленная ветка master (origin/master). Таким образом история локального репозитория совпадает с историей удаленного репозитория;

-
Теперь в дело включается Андрей. Он тоже исправляет ошибку. Ошибка заключалась в том, что в проекте не хватало справочников:
- Перейдите в ПроектАндрей;
- Добавьте справочник в проект DemoConfDT;
- Зафиксируйте изменения. Напишите сообщение коммита: 3 коммит, нажмите Фиксировать и отправить...;
-
1C:EDT покажет вам результат отправки изменений. На этот раз результат будет отрицательный. Отправка изменений из локальной ветки master в удаленную ветку master отклонена;

-
В панели История вы видите, что в текущей локальной ветке master появился новый коммит Андрея, который стал головой ветки. Однако этот коммит не был передан на сервер и удаленная ветка master осталась на том же коммите, на котором и была. Об этом говорит указатель origin/master. Таким образом история локального репозитория разошлась с историей удаленного репозитория. У вас есть один неотправленный коммит;

-
Возникшая ситуация требует пояснения:

Василий получил изменения с сервера (коммит 1), создал свои изменения (коммит 2) и успешно отправил их на сервер, потому что состояние серверной ветки за это время не изменилось.
Андрей также получил изменения с сервера (коммит 1), создал свои изменения (коммит 3). Однако за это время в серверной ветке появились изменения Василия (коммит 2). Чтобы изменения Андрея (коммит3) появились на сервере, их нужно каким-то образом объединить с изменениями Василия (коммит 2). Git не выполняет такие операции на сервере, поэтому и отклоняет изменения Андрея. Даже несмотря на то, что Андрей и Василий изменяли разные части проекта.
Объединение изменений (слияние веток) в Git вы должны выполнить в своем локальном репозитории. Поэтому Андрей сначала должен получить с сервера изменения Василия (коммит 2), объединить их со своими изменениями (коммит 3) и только после этого он сможет отправить свой результат на сервер. На схеме это будет выглядеть следующим образом:

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

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

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

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

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

Василий внес изменения в ветку master и отправил их на сервер. Андрей тоже изменил ветку master, но т.к. на сервере уже появились изменения Василия, Андрею нужно сначала получить их с сервера, объединить со своими изменениями (Групповая разработка > Получить и слить (pull)), а затем уже отправлять на сервер.
На уровень выше: Примеры работы