Files
docs/public/template-sync-strategy/workflows/update-template.html

42 lines
29 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Обычное обновление шаблона | Template Sync Strategy</title>
<meta name="description" content="Повторяемый процесс доставки изменений шаблона в приложение после первичной настройки.">
<meta name="generator" content="VitePress v1.6.4">
<link rel="preload stylesheet" href="/template-sync-strategy/assets/style.CSIvdBoa.css" as="style">
<link rel="preload stylesheet" href="/template-sync-strategy/vp-icons.css" as="style">
<script type="module" src="/template-sync-strategy/assets/app.0Bzyh7PD.js"></script>
<link rel="preload" href="/template-sync-strategy/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/template-sync-strategy/assets/chunks/theme.CloMnL7i.js">
<link rel="modulepreload" href="/template-sync-strategy/assets/chunks/framework.B1nRs-GM.js">
<link rel="modulepreload" href="/template-sync-strategy/assets/workflows_update-template.md.C8s1FFCq.lean.js">
<script id="sync-docs-theme">(()=>{if(localStorage.getItem("vitepress-theme-appearance"))return;const e=localStorage.getItem("all-docs-theme");e&&(localStorage.setItem("vitepress-theme-appearance",e==="system"?"auto":e),localStorage.removeItem("all-docs-theme"))})();</script>
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-c4daae71><!--[--><!--]--><!--[--><span tabindex="-1" data-v-17ad389b></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-17ad389b>Skip to content</a><!--]--><!----><header class="VPNav" data-v-c4daae71 data-v-a46e73f0><div class="VPNavBar" data-v-a46e73f0 data-v-bb7529ee><div class="wrapper" data-v-bb7529ee><div class="container" data-v-bb7529ee><div class="title" data-v-bb7529ee><div class="VPNavBarTitle has-sidebar" data-v-bb7529ee data-v-5622a072><a class="title" href="/template-sync-strategy/" data-v-5622a072><!--[--><!--]--><!----><span data-v-5622a072>Template Sync Strategy</span><!--[--><!--]--></a></div></div><div class="content" data-v-bb7529ee><div class="content-body" data-v-bb7529ee><!--[--><!--[--><!--[--><a class="docsNavLink docsBackLink" href="/" target="_self" aria-label="Вернуться к списку документаций" data-v-6cf40780><span class="docsBackIcon" aria-hidden="true" data-v-6cf40780></span><span data-v-6cf40780>К списку документаций</span></a><!--]--><!--]--><!--]--><div class="VPNavBarSearch search" data-v-bb7529ee><!----></div><!----><!----><div class="VPNavBarAppearance appearance" data-v-bb7529ee data-v-123fcb2f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-123fcb2f data-v-fa1daf57 data-v-7012e5dd><span class="check" data-v-7012e5dd><span class="icon" data-v-7012e5dd><!--[--><span class="vpi-sun sun" data-v-fa1daf57></span><span class="vpi-moon moon" data-v-fa1daf57></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-bb7529ee data-v-08b35e6f data-v-f2234a39><!--[--><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-bb7529ee data-v-0c845e5d data-v-40e55da0><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-40e55da0><span class="vpi-more-horizontal icon" data-v-40e55da0></span></button><div class="menu" data-v-40e55da0><div class="VPMenu" data-v-40e55da0 data-v-39eca401><!----><!--[--><!--[--><!----><div class="group" data-v-0c845e5d><div class="item appearance" data-v-0c845e5d><p class="label" data-v-0c845e5d>Appearance</p><div class="appearance-action" data-v-0c845e5d><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-0c845e5d data-v-fa1daf57 data-v-7012e5dd><span class="check" data-v-7012e5dd><span class="icon" data-v-7012e5dd><!--[--><span class="vpi-sun sun" data-v-fa1daf57></span><span class="vpi-moon moon" data-v-fa1daf57></span><!--]--></span></span></button></div></div></div><div class="group" data-v-0c845e5d><div class="item social-links" data-v-0c845e5d><div class="VPSocialLinks social-links-list" data-v-0c845e5d data-v-f2234a39><!--[--><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--[--><!--[--><a class="docsRepoLink" href="https://gromlab.ru/gromov/docs" target="_blank" rel="noopener noreferrer" aria-label="Открыть репозиторий" title="Репозиторий" data-v-6cf40780><svg aria-hidden="true" viewBox="0 0 24 24" data-v-6cf40780><path d="M12 .5a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57l-.02-2.04c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1.01-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .5Z" data-v-6cf40780></path></svg></a><!--]--><!--]--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-bb7529ee data-v-670493dd><span class="container" data-v-670493dd><span class="top" data-v-670493dd></span><span class="middle" data-v-670493dd></span><span
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> switch</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> template</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pull</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --ff-only</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> push</span></span></code></pre></div><p>Этот вариант работает, если для ветки <code>template</code> настроено:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>pull из templates/master</span></span>
<span class="line"><span>push в origin/template</span></span></code></pre></div><p>Явная форма без зависимости от tracking-настроек:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> fetch</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> templates</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> switch</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> template</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> merge</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --ff-only</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> templates/master</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> push</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> origin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> template</span></span></code></pre></div><p>Если <code>--ff-only</code> падает, значит <code>template</code> перестал быть чистым слепком шаблона. Остановитесь и разберите причину до продолжения.</p><p>Проверьте, что <code>origin/template</code> обновился до шаблона:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> fetch</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> origin</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> fetch</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> templates</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --no-pager</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> log</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --oneline</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> origin/template</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --no-pager</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> log</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --oneline</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> templates/master</span></span></code></pre></div><p>Оба коммита должны совпадать.</p><h2 id="_2-создать-ветку-обновления-приложения" tabindex="-1">2. Создать ветку обновления приложения <a class="header-anchor" href="#_2-создать-ветку-обновления-приложения" aria-label="Permalink to &quot;2. Создать ветку обновления приложения&quot;"></a></h2><p>После обновления <code>template</code> создайте временную ветку от текущего приложения:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> fetch</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> origin</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> switch</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -c</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> sync/update-template-v2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> origin/master</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> merge</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> origin/template</span></span></code></pre></div><p>Имя ветки можно менять под версию или дату:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>sync/update-template-v2</span></span>
<span class="line"><span>sync/update-template-2026-05-09</span></span>
<span class="line"><span>sync/update-template-1.8.0</span></span></code></pre></div><p>Проверьте, что временная ветка реально отличается от <code>origin/master</code> изменениями шаблона:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --no-pager</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> diff</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --stat</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> origin/master...HEAD</span></span></code></pre></div><p>Если diff пустой, значит обновлённый <code>origin/template</code> не был влит в <code>sync/*</code> ветку или в шаблоне нет новых изменений.</p><h2 id="_3-решить-конфликты" tabindex="-1">3. Решить конфликты <a class="header-anchor" href="#_3-решить-конфликты" aria-label="Permalink to &quot;3. Решить конфликты&quot;"></a></h2><p>Если есть конфликты, решайте их именно в <code>sync/*</code>.</p><p>После решения конфликтов:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> commit</span></span></code></pre></div><p>Если конфликтов не было, Git сам создаст merge-коммит или выполнит fast-forward, в зависимости от истории.</p><h2 id="_4-запушить-sync-ветку" tabindex="-1">4. Запушить sync-ветку <a class="header-anchor" href="#_4-запушить-sync-ветку" aria-label="Permalink to &quot;4. Запушить sync-ветку&quot;"></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> push</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -u</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> origin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> sync/update-template-v2</span></span></code></pre></div><p>Дальше откройте PR/MR:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>source: sync/update-template-v2</span></span>
<span class="line"><span>target: master</span></span></code></pre></div><p>Правила merge описаны в <a href="./review-and-merge">Review и merge</a>.</p></div></div></main><footer class="VPDocFooter" data-v-ef3a4dda data-v-07d71ff1><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-07d71ff1><span class="visually-hidden" id="doc-footer-aria-label" data-v-07d71ff1>Pager</span><div class="pager" data-v-07d71ff1><a class="VPLink link pager-link prev" href="/template-sync-strategy/setup/existing-master-migration" data-v-07d71ff1><!--[--><span class="desc" data-v-07d71ff1>Previous page</span><span class="title" data-v-07d71ff1>Миграция существующего master</span><!--]--></a></div><div class="pager" data-v-07d71ff1><a class="VPLink link pager-link next" href="/template-sync-strategy/workflows/resolve-conflicts" data-v-07d71ff1><!--[--><span class="desc" data-v-07d71ff1>Next page</span><span class="title" data-v-07d71ff1>Решение конфликтов</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"concepts_model.md\":\"C805A9As\",\"concepts_rules.md\":\"QraT4IhZ\",\"concepts_why.md\":\"akfw90Fj\",\"index.md\":\"C5Q_ZnE3\",\"overview.md\":\"DOeHHuHO\",\"reference_cheatsheet.md\":\"0TzKSaSb\",\"reference_glossary.md\":\"DLD-b2Ke\",\"reference_troubleshooting.md\":\"BrYSpYuW\",\"setup_clean-repository.md\":\"CPqmBfph\",\"setup_existing-master-migration.md\":\"BQ5VImS9\",\"workflows_resolve-conflicts.md\":\"CujNWdsi\",\"workflows_review-and-merge.md\":\"D5KhlAbu\",\"workflows_update-template.md\":\"C8s1FFCq\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Template Sync Strategy\",\"description\":\"Управляемое обновление проектов от шаблона\",\"base\":\"/template-sync-strategy/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"sidebar\":[{\"text\":\"Введение\",\"items\":[{\"text\":\"Обзор\",\"link\":\"/overview\"},{\"text\":\"Зачем это нужно\",\"link\":\"/concepts/why\"},{\"text\":\"Модель веток\",\"link\":\"/concepts/model\"},{\"text\":\"Правила процесса\",\"link\":\"/concepts/rules\"}]},{\"text\":\"Настройка\",\"items\":[{\"text\":\"Новый проект от шаблона\",\"link\":\"/setup/clean-repository\"},{\"text\":\"Миграция существующего master\",\"link\":\"/setup/existing-master-migration\"}]},{\"text\":\"Рабочие процессы\",\"items\":[{\"text\":\"Обычное обновление шаблона\",\"link\":\"/workflows/update-template\"},{\"text\":\"Решение конфликтов\",\"link\":\"/workflows/resolve-conflicts\"},{\"text\":\"Review и merge\",\"link\":\"/workflows/review-and-merge\"}]},{\"text\":\"Справочник\",\"items\":[{\"text\":\"Памятка\",\"link\":\"/reference/cheatsheet\"},{\"text\":\"Troubleshooting\",\"link\":\"/reference/troubleshooting\"},{\"text\":\"Глоссарий\",\"link\":\"/reference/glossary\"}]}],\"socialLinks\":[]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
</body>
</html>