Files
docs/public/template-sync-strategy/assets/concepts_model.md.C805A9As.js

5 lines
7.1 KiB
JavaScript
Raw Normal View History

import{_ as a,o as s,c as t,ae as i}from"./chunks/framework.B1nRs-GM.js";const k=JSON.parse('{"title":"Модель веток","description":"Роли веток и remote в стратегии обновления проекта от шаблона.","frontmatter":{"title":"Модель веток","description":"Роли веток и remote в стратегии обновления проекта от шаблона."},"headers":[],"relativePath":"concepts/model.md","filePath":"concepts/model.md"}'),p={name:"concepts/model.md"};function l(n,e,d,o,h,r){return s(),t("div",null,[...e[0]||(e[0]=[i(`<div style="display:none;" hidden="true" aria-hidden="true">Are you an LLM? You can read better optimized documentation at /template-sync-strategy/concepts/model.md for this page in Markdown format</div><h1 id="модель-веток" tabindex="-1">Модель веток <a class="header-anchor" href="#модель-веток" aria-label="Permalink to &quot;Модель веток&quot;"></a></h1><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>templates/master -&gt; template -&gt; sync/* -&gt; master</span></span></code></pre></div><p>Это логическая модель ответственности. Она не требует физически разделять файлы шаблона и приложения по папкам.</p><h2 id="templates-master" tabindex="-1">templates/master <a class="header-anchor" href="#templates-master" aria-label="Permalink to &quot;templates/master&quot;"></a></h2><p><code>templates/master</code> — это <code>master</code> из репозитория шаблона.</p><p>В репозитории приложения он доступен через remote <code>templates</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;"> remote</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> templates</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">template-repo-ur</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">l</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</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></code></pre></div><p>Этот remote считается источником обновлений шаблона.</p><h2 id="template" tabindex="-1">template <a class="header-anchor" href="#template" aria-label="Permalink to &quot;template&quot;"></a></h2><p><code>template</code> чистый слепок шаблона внутри репозитория приложения.</p><p>Его задача показать, какая версия шаблонной базы сейчас доступна приложению.</p><p>В <code>template</code> нельзя коммитить руками изменения приложения. Эта ветка обновляется только из <code>templates/master</code>.</p><h2 id="master" tabindex="-1">master <a class="header-anchor" href="#master" aria-label="Permalink to &quot;master&quot;"></a></h2><p><code>master</code> основная ветка приложения.</p><p>Она содержит:</p><ul><li>базу шаблона;</li><li>продуктовый код;</li><li>локальные настройки приложения;</li><li>историю применения обновлений шаблона.</li></ul><p><code>master</code> не используется как место ручного решения конфликтов при обновлении шаблона.</p><h2 id="sync" tabindex="-1">sync/* <a class="header-anchor" href="#sync" aria-label="Permalink to &quot;sync/*&quot;"></a></h2><p><code>sync/*</code> временная ветка для обновления приложения от шаблона.</p><p>Она создаётся от актуального <code>origin/master</code>, после чего в неё вливается <code>origin/template</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;"> 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><h2 id="почему-нужен-отдельныи-sync-слои" tabindex="-1">Почему нужен отдельный sync-слой <a class="header-anchor" href="#почему-нужен-отдельныи-sync-слои" aria-label="Permalink to &quot;Почему нужен отдельный sync-слой&quot;"></a></h2><p>Нельзя безопасно использовать <code>template</code> как source branch для прямого PR/MR в <code>master</code>: если возникнет конфликт, решение может попасть в <code>template</code>.</p><p>После этого <code>template</code> перестанет быть чистым слепком шаблона. Git начнёт видеть в ней не только шаблон, но и локальные решения конкретного приложения.</p><p><code>sync/*</code> можно пачкать conflict resolve-коммитами, проверками и правками совместимости. Эта ветка временная и удаляется после merge.</p>`,29)])])}const m=a(p,[["render",l]]);export{k as __pageData,m as default};