Files
docs/public/template-sync-strategy/setup/existing-master-migration.md
S.Gromov 1a14df9366 feat: добавить документацию Template Sync Strategy
- добавлены каноны и VitePress-сайт стратегии обновления шаблонов

- подключена карточка документации на главной странице

- добавлены сборочные скрипты, Caddy-маршрут и Docker-сборка

- добавлена git-иконка для карточки и сгенерированы публичные артефакты
2026-05-13 23:23:31 +03:00

4.1 KiB
Raw Blame History

url, description
url description
/template-sync-strategy/setup/existing-master-migration.md Как одноразово связать master приложения с историей шаблона, если проект был создан отдельно.

Миграция существующего master

Этот сценарий нужен, если в репозитории приложения уже есть master, но он был создан не от шаблона.

Проблема

Если master приложения и template имеют разные корневые коммиты, Git видит две несвязанные истории.

Плохое состояние:

template: T1---T2---T3

master:   A1---A2

При попытке выполнить обычный merge Git может ответить:

fatal: отказ слияния несвязанных историй изменений

Это означает, что у веток нет общего предка.

Цель миграции

Нужно один раз связать истории, чтобы дальше обновления шаблона шли обычным merge-процессом.

После миграции история будет выглядеть примерно так:

template: T1---T2---T3
                     \
master:   A1---A2-----M

Где M — одноразовый merge-коммит, который связал историю приложения с историей шаблона.

Подключить репозиторий шаблона

В репозитории приложения:

cd /path/to/app-repo
git remote add templates <template-repo-url>
git fetch templates
git fetch origin

Если remote templates уже существует:

git fetch templates
git fetch origin

Создать или обновить template

Если ветки template ещё нет:

git switch -c template templates/master
git push -u origin template

Если ветка template уже есть:

git switch template
git merge --ff-only templates/master
git push origin template

Опционально настройте удобное поведение pull и push:

git config branch.template.remote templates
git config branch.template.merge refs/heads/master
git config branch.template.pushRemote origin
git remote set-url --push templates DISABLED

Связать master с template

Создайте временную ветку от текущего приложения:

git fetch origin
git switch -c sync/bootstrap-template origin/master

Слейте шаблон с разрешением несвязанных историй:

git merge --allow-unrelated-histories origin/template

Если есть конфликты, решите их в ветке sync/bootstrap-template:

git add .
git commit

Если конфликтов не было, Git сам создаст merge-коммит.

Запушьте ветку:

git push -u origin sync/bootstrap-template

Дальше через UI или локально смержите:

sync/bootstrap-template -> master

Что проверить перед merge

Посмотрите граф истории:

git --no-pager log --oneline --graph --decorate --all --max-count=50

Убедитесь, что sync/bootstrap-template содержит и историю приложения, и историю шаблона.

Посмотрите итоговый diff:

git --no-pager diff origin/master...sync/bootstrap-template

Когда миграцию делать не стоит

Не стоит связывать истории, если приложение только что создано и его можно безопасно пересоздать от шаблона.

Для нового проекта лучше сделать чистый старт по инструкции Новый проект от шаблона.