--- url: /template-sync-strategy/setup/clean-repository.md description: Старт нового приложения от шаблонного репозитория с правильной историей веток. --- # Новый проект от шаблона Этот сценарий подходит, когда репозиторий приложения ещё пустой или его можно безопасно пересоздать от шаблона. Целевая модель: ```text templates/master -> template -> sync/* -> master ``` ## Условия Есть два репозитория: ```text template repo = репозиторий шаблона app repo = репозиторий приложения ``` В обоих репозиториях основная ветка называется `master`. ## Подготовить шаблон В репозитории шаблона: ```bash cd /path/to/template-repo git switch master ``` Если это пустой репозиторий, добавьте первый файл и запушьте `master`: ```bash printf "# Template Repository\n\nBase template version: v1\n" > README.md git add README.md git commit -m "docs: добавить базовый шаблон" git push -u origin master ``` ## Подключить шаблон в приложении В репозитории приложения: ```bash cd /path/to/app-repo git remote add templates git fetch templates ``` Создайте ветку `template` от шаблона: ```bash git switch -c template templates/master git push -u origin template ``` Создайте ветку приложения `master` от `template`: ```bash git switch -c master template ``` Добавьте слой приложения: ```bash mkdir -p app printf "Application code v1\n" > app/app.txt git add app/app.txt git commit -m "feat: добавить слой приложения" git push -u origin master ``` После этого история выглядит так: ```text template: T1 master: T1---A1 ``` Где `T1` — коммит шаблона, а `A1` — коммит приложения. ## Настроить pull и push для template Можно сделать так, чтобы на ветке `template`: ```text git pull тянул из templates/master git push пушил в origin/template ``` Команды: ```bash git config branch.template.remote templates git config branch.template.merge refs/heads/master git config branch.template.pushRemote origin ``` Дополнительно можно запретить случайный push в репозиторий шаблона: ```bash git remote set-url --push templates DISABLED ``` ## Дальше После первичной настройки постоянные ветки такие: ```text template = чистый шаблон master = приложение ``` Обновления шаблона выполняются через временные ветки `sync/*` по инструкции [Обычное обновление шаблона](../workflows/update-template.md).