feat: добавить документацию Template Sync Strategy

- добавлены каноны и VitePress-сайт стратегии обновления шаблонов

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

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

- добавлена git-иконка для карточки и сгенерированы публичные артефакты
This commit is contained in:
2026-05-13 23:23:31 +03:00
parent 07b349e678
commit 1a14df9366
97 changed files with 3697 additions and 2 deletions

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,75 @@
---
url: /template-sync-strategy/reference/cheatsheet.md
description: Короткий набор команд для регулярного обновления приложения от шаблона.
---
# Памятка
Рабочая схема:
```text
templates/master -> template -> sync/* -> master
```
## Обновить template
В репозитории приложения:
```bash
git switch template
git pull --ff-only
git push
```
Это подтягивает свежий шаблон из `templates/master` и пушит его в `origin/template`.
## Создать ветку обновления
```bash
git fetch origin
git switch -c sync/update-template-vX origin/master
git merge origin/template
```
Если есть конфликты, решить их в этой же ветке:
```bash
git add .
git commit
```
## Запушить sync-ветку
```bash
git push -u origin sync/update-template-vX
```
## Влить через UI
Создать PR/MR:
```text
source: sync/update-template-vX
target: master
```
Важно:
```text
squash = off
```
## Проверка
```bash
git --no-pager log --oneline --graph --decorate --all --max-count=30
```
## Суть процесса
1. Обновить `template` из `templates/master`.
2. Создать `sync/*` от `origin/master`.
3. Влить `origin/template` в `sync/*`.
4. Решить конфликты, если есть.
5. Запушить `sync/*`.
6. Через UI влить `sync/* -> master`.

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,52 @@
---
url: /template-sync-strategy/reference/glossary.md
description: 'Термины, которые используются в Template Sync Strategy.'
---
# Глоссарий
## Template repo
Репозиторий шаблона. В нём живёт общая техническая база: CI/CD, Dockerfile, зависимости, линтер, сборка, структура и документация.
## App repo
Репозиторий приложения. В нём живёт продуктовый код и локальные настройки конкретного приложения.
## templates
Git remote внутри репозитория приложения, который указывает на репозиторий шаблона.
Пример:
```bash
git remote add templates <template-repo-url>
```
## templates/master
Ветка `master` из репозитория шаблона, доступная в приложении через remote `templates`.
## template
Ветка внутри репозитория приложения, которая должна быть чистым слепком `templates/master`.
## master
Основная ветка приложения. Содержит шаблонную базу плюс продуктовый слой.
## sync/\*
Временные ветки для обновления приложения от шаблона. Создаются от `origin/master`, получают merge из `origin/template`, проходят review и затем вливаются в `master`.
## Fast-forward
Обновление ветки без merge-коммита, когда текущая ветка может быть просто передвинута вперёд по истории.
## Merge commit
Коммит слияния, который сохраняет связь двух историй. Допустим для `sync/* -> master`.
## Squash
Способ merge, при котором все изменения source branch превращаются в один новый коммит. Для sync-PR/MR запрещён, потому что может разрушить полезную связь истории `master` с историей `template`.

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,102 @@
---
url: /template-sync-strategy/reference/troubleshooting.md
description: Типовые ошибки при обновлении проекта от шаблона и способы диагностики.
---
# Troubleshooting
## fatal: отказ слияния несвязанных историй изменений
Ошибка:
```text
fatal: отказ слияния несвязанных историй изменений
```
Причина: `master` приложения не был создан от `template`, поэтому у веток нет общего предка.
Решение: выполнить одноразовую миграцию через `sync/bootstrap-template` по инструкции [Миграция существующего master](../setup/existing-master-migration.md).
Коротко:
```bash
git switch -c sync/bootstrap-template origin/master
git merge --allow-unrelated-histories origin/template
git push -u origin sync/bootstrap-template
```
## --ff-only падает на template
Ошибка возникает при команде:
```bash
git merge --ff-only templates/master
```
Причина: в `template` появились коммиты, которых нет в шаблоне. Значит ветка перестала быть чистым слепком.
Что проверить:
```bash
git fetch templates
git --no-pager log --oneline --graph --decorate templates/master..template
```
Решение зависит от причины. Не продолжайте обновление, пока не станет понятно, какие локальные коммиты попали в `template`.
## Пустой diff в sync-ветке
Симптом:
```bash
git --no-pager diff --stat origin/master...HEAD
```
не показывает изменений.
Возможные причины:
* в шаблоне нет новых изменений;
* `origin/template` не был обновлён;
* `origin/template` не был влит в `sync/*`;
* sync-ветка создана не от актуального `origin/master`.
Что проверить:
```bash
git fetch origin
git fetch templates
git --no-pager log --oneline -1 origin/template
git --no-pager log --oneline -1 templates/master
git --no-pager log --oneline --graph --decorate --all --max-count=50
```
## Случайно включили squash
Если sync-PR/MR уже влит squash-merge, история шаблона могла не сохраниться как нормальная merge-связь.
Что сделать:
* зафиксировать факт в описании проекта;
* проверить, видит ли Git последующие обновления шаблона без повторного применения старых изменений;
* при следующем обновлении внимательно смотреть diff и конфликты;
* для будущих sync-PR/MR отключить squash.
Если ситуация стала неуправляемой, может потребоваться отдельная техническая миграция истории.
## cannot run less
Ошибка:
```text
cannot run less
```
Причина: Git пытается открыть pager `less`, которого нет в системе.
Решение: использовать `git --no-pager`:
```bash
git --no-pager log --oneline --graph --decorate --all --max-count=50
git --no-pager diff template...master
```