---
metadata:
  - name: generator
    content: Diplodoc Platform v5.54.2
alternate:
  - https://sourcecraft.dev/portal/docs/en/sourcecraft/operations/branch-policies.md
  - https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/branch-policies.md
  - href: ru/sourcecraft/operations/branch-policies.md
    type: text/markdown
    title: Markdown version
  - href: ../../llms.txt
    type: text/markdown
    title: llms.txt
title: Настроить политику веток в репозитории SourceCraft
description: Инструкция по настройке политик веток в репозитории SourceCraft для контроля слияния изменений и защиты важных веток.
---
> **Documentation Index:** Fetch the complete configuration index at https://sourcecraft.dev/portal/docs/ru/llms.txt


# Настроить политику веток в репозитории SourceCraft

<!-- source: ru/_includes/sourcecraft/configuration-tip.md -->
{% note tip %}

Настройка и просмотр конфигураций репозитория доступны в интерфейсе SourceCraft в разделе ![image](../../_assets/console-icons/gear.svg) **Настройки репозитория** в секции ![image](../../_assets/console-icons/nut-hex.svg) **Конфигурации**. Подробнее в инструкции [Настроить конфигурации репозитория в виде кода](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/configuration-edit.md).

{% endnote %}
<!-- endsource: ru/_includes/sourcecraft/configuration-tip.md -->

<!-- source: ru/_includes/sourcecraft/branch-policies-intro.md -->
_Политики веток_ — это набор правил и ограничений, которые применяются к определенным веткам и тегам в [репозитории](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#repos). С помощью политик вы можете контролировать процесс внесения изменений, обеспечивать ревью кода, соблюдать правильность именования и условия создания веток и тегов, а также защищать ветки от случайных коммитов или прямого пуша.
<!-- endsource: ru/_includes/sourcecraft/branch-policies-intro.md -->

Подробнее на странице [Политики веток в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/branch-policies.md).

<!-- source: ru/_includes/sourcecraft/branch-policies-config.md -->
Конфигурация политик задается для конкретного репозитория и хранится в файле `.sourcecraft/branches.yaml`. Для всего репозитория действует конфигурация, которая размещена в основной ветке, например `master` или `main`. Вы также можете задать [конфигурацию на уровне организации SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/org-config.md).

Общий вид конфигурации политики в `.sourcecraft/branches.yaml`:

<!-- source: ru/_includes/sourcecraft/branch-policies-config-template.md -->
```yaml
branch_protection:
  policies:
    - target: <тип_защищаемого_ресурса>
      matches: "<фильтр>"
      message: "<сообщение_пользователю_при_срабатывании>"
      rules:
        - <правило_1>
        - <правило_2>
```

Где:

* `target` — тип защищаемого ресурса. Обязательный параметр. Возможные значения:
  * `default_branch` — основная ветка, например `master` или `main`.
  * `branch` — ветка.
  * `tag` — тег.

* `matches` — фильтр или список фильтров по имени защищаемого ресурса. Обязательный параметр для `target: branch` и `target: tag`. 
* `message` — сообщение, которое будет показываться пользователю при срабатывании политики. Обязательный параметр.
* `rules` — правило или список правил, которые будут применены к защищаемому ресурсу. Обязательный параметр. Возможные значения:
  * `prevent_force_push` — нельзя переписывать историю коммитов в ветке (выполнять `force push`). 
  * `prevent_non_pr_changes` — нельзя напрямую вносить правки в ветку (выполнять `push`), только через [предложение изменений](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#pr).
  * `prevent_all_changes` — нельзя выполнять любые действия с веткой или тегом.

      <!-- source: ru/_includes/sourcecraft/branch-policies-deprecated-rule.md -->
      {% note warning %}

      Правило `prevent_all_changes` устарело. Вместо него используйте связку правил `prevent_creation` и `prevent_update`.

      {% endnote %}
      <!-- endsource: ru/_includes/sourcecraft/branch-policies-deprecated-rule.md -->

  * `prevent_deletion` — нельзя удалять ветку или тег.
  * `prevent_creation` — нельзя создавать ветку или тег.
  * `prevent_update` — нельзя вносить изменения в ветку или тег после создания (запрещены `push`, `force push`, удаление и слияние через предложение изменений).
<!-- endsource: ru/_includes/sourcecraft/branch-policies-config-template.md -->
<!-- endsource: ru/_includes/sourcecraft/branch-policies-config.md -->

Полная схема находится в подразделе [Схема политики веток в формате JSON](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/branch-policies.md#json-schema).

Чтобы настроить политики веток в репозитории: 
1. Склонируйте репозиторий:

    <!-- source: ru/_includes/sourcecraft/clone-repo-workflow.md -->
    1. [Установите Git](https://git-scm.com/downloads).
    1. Откройте [главную страницу](https://sourcecraft.dev) SourceCraft.
    1. На вкладке ![image](../../_assets/console-icons/house.svg) **Домой** в секции ![image](../../_assets/console-icons/layout-tabs.svg) **Ваша мастерская** перейдите в раздел ![image](../../_assets/console-icons/archive.svg) **Репозитории** и выберите репозиторий.

        Также вы можете открыть любой публичный репозиторий.

    1. На странице репозитория в правом верхнем углу нажмите кнопку ![image](../../_assets/console-icons/chevron-down-wide.svg) **Клонировать**.
    1. Из поля **HTTPS** или **SSH** скопируйте ![image](../../_assets/console-icons/copy.svg) ссылку для клонирования репозитория.

        В зависимости от протокола подключения для клонирования используются разные домены:

        #|
        || **Протокол** | **Домен** | **Ссылка для клонирования** ||
        || HTTPS | `git.sourcecraft.dev` | `https://git@git.sourcecraft.dev/<слаг_организации>/<слаг_репозитория>.git` ||
        || SSH | `ssh.sourcecraft.dev` | `ssh://ssh.sourcecraft.dev/<слаг_организации>/<слаг_репозитория>.git` ||
        |#

    1. В терминале выполните команду:

        ```bash
        git clone <ссылка_для_клонирования_репозитория>
        ```

        {% cut "Пример команды для клонирования репозитория с документацией SourceCraft" %}

        ```bash
        git clone https://git@git.sourcecraft.dev/sourcecraft/documentation.git
        ```

        {% endcut %}

        <!-- source: ru/_includes/sourcecraft/private-repo-clone-note.md -->
        {% note warning %}

        Чтобы склонировать [приватный или внутренний репозиторий](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#repos), аутентифицируйтесь с помощью [персонального токена (PAT)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/pat.md) или [SSH-ключа](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/ssh.md).

        {% endnote %}
        <!-- endsource: ru/_includes/sourcecraft/private-repo-clone-note.md -->

    1. Перейдите в склонированный репозиторий:
        
        ```bash
        cd <имя_репозитория>
        ```
    <!-- endsource: ru/_includes/sourcecraft/clone-repo-workflow.md -->

1. Сформируйте файл конфигурации политики веток `.sourcecraft/branches.yaml`, например:

    <!-- source: ru/_includes/sourcecraft/branch-policies-example.md -->
    ```yaml
    branch_protection:
      policies:
        ## Запрет переписывания истории коммитов, внесения правок без 
        ## предложения изменений, а также удаления основной ветки
        - target: default_branch
          message: "Direct push into main branch is forbidden, create PR first"
          rules:
            - prevent_force_push
            - prevent_non_pr_changes
            - prevent_deletion

        ## Запрет создания веток с названиями, соответствующими фильтрам
        - target: branch
          matches: ["**", "!OO-**/**", "!hotfix/**", "!chore/**", "!release/**"]
          message: "Please use proper branch naming"
          rules:
            - prevent_creation

        ## Запрет создания тегов с названиями, соответствующими фильтрам
        - target: tag
          matches: "gitcore-**"
          message: "Manual tag creation is forbidden, please use Releaser"
          rules:
            - prevent_creation
    ```

    Также смотрите пример политики веток в репозитории SourceCraft [test-serverless-cube](https://sourcecraft.dev/mikhail-bondarevsky/test-serverless-cube/browse/.src.ci.yaml?rev=master).
    <!-- endsource: ru/_includes/sourcecraft/branch-policies-example.md -->

    <!-- source: ru/_includes/sourcecraft/wildcard-pattern-tip.md -->
    {% note tip %}

    Для групповой фильтрации рекомендуется использовать паттерн `**`, поскольку простой паттерн `*` не предусматривает совпадения в выражениях с `/`.

    {% endnote %}
    <!-- endsource: ru/_includes/sourcecraft/wildcard-pattern-tip.md -->

    Подробнее о синтаксисе и правилах применения фильтров по путям в разделе [Фильтры и паттерны в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/filters-by-paths.md).

1. Добавьте файл конфигурации политики веток в индекс `git`, сделайте коммит и отправьте изменения в удаленную ветку `main`:

    ```bash
    git add .sourcecraft/branches.yaml
    git commit -m "Added branch policies configuration"
    git push -u origin main
    ```

1. Чтобы проверить срабатывание политики веток, внесите изменения в файлы в основной ветке, сделайте коммит и попробуйте отправить изменения в удаленный репозиторий:

    ```bash
    git add .
    git commit -m "Test changes"
    git push -u origin main
    ```

    В результате вы получите ошибку с сообщением `Direct push into main branch is forbidden, create PR first`.

## Настроить автоматическое удаление веток после слияния {#branch-cleanup}

Вы можете настроить автоматическое удаление ветки-источника предложения изменений после слияния с целевой веткой. Подробнее в разделе [Автоматическое удаление веток после слияния](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/branch-policies.md#branch-cleanup).

Чтобы настроить автоматическое удаление веток:

1. Склонируйте репозиторий:

    <!-- source: ru/_includes/sourcecraft/clone-repo-workflow.md -->
    1. [Установите Git](https://git-scm.com/downloads).
    1. Откройте [главную страницу](https://sourcecraft.dev) SourceCraft.
    1. На вкладке ![image](../../_assets/console-icons/house.svg) **Домой** в секции ![image](../../_assets/console-icons/layout-tabs.svg) **Ваша мастерская** перейдите в раздел ![image](../../_assets/console-icons/archive.svg) **Репозитории** и выберите репозиторий.

        Также вы можете открыть любой публичный репозиторий.

    1. На странице репозитория в правом верхнем углу нажмите кнопку ![image](../../_assets/console-icons/chevron-down-wide.svg) **Клонировать**.
    1. Из поля **HTTPS** или **SSH** скопируйте ![image](../../_assets/console-icons/copy.svg) ссылку для клонирования репозитория.

        В зависимости от протокола подключения для клонирования используются разные домены:

        #|
        || **Протокол** | **Домен** | **Ссылка для клонирования** ||
        || HTTPS | `git.sourcecraft.dev` | `https://git@git.sourcecraft.dev/<слаг_организации>/<слаг_репозитория>.git` ||
        || SSH | `ssh.sourcecraft.dev` | `ssh://ssh.sourcecraft.dev/<слаг_организации>/<слаг_репозитория>.git` ||
        |#

    1. В терминале выполните команду:

        ```bash
        git clone <ссылка_для_клонирования_репозитория>
        ```

        {% cut "Пример команды для клонирования репозитория с документацией SourceCraft" %}

        ```bash
        git clone https://git@git.sourcecraft.dev/sourcecraft/documentation.git
        ```

        {% endcut %}

        <!-- source: ru/_includes/sourcecraft/private-repo-clone-note.md -->
        {% note warning %}

        Чтобы склонировать [приватный или внутренний репозиторий](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#repos), аутентифицируйтесь с помощью [персонального токена (PAT)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/pat.md) или [SSH-ключа](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/ssh.md).

        {% endnote %}
        <!-- endsource: ru/_includes/sourcecraft/private-repo-clone-note.md -->

    1. Перейдите в склонированный репозиторий:
        
        ```bash
        cd <имя_репозитория>
        ```
    <!-- endsource: ru/_includes/sourcecraft/clone-repo-workflow.md -->

1. В файл `.sourcecraft/branches.yaml` добавьте секцию `pull_request.branch_cleanup` и в параметре `matches` укажите [фильтры по путям](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/filters-by-paths.md), которые определяют, для каких веток будет включено автоматическое удаление, например:

    ```yaml
    pull_request:
      branch_cleanup:
        matches: ["**", "!hotfix/**", "!chore/**", "!release/**"]
    ```

    В этом примере автоматическое удаление включено для всех веток, кроме веток `hotfix/**`, `chore/**` и `release/**`.

    <!-- source: ru/_includes/sourcecraft/wildcard-pattern-tip.md -->
    {% note tip %}

    Для групповой фильтрации рекомендуется использовать паттерн `**`, поскольку простой паттерн `*` не предусматривает совпадения в выражениях с `/`.

    {% endnote %}
    <!-- endsource: ru/_includes/sourcecraft/wildcard-pattern-tip.md -->

1. Добавьте измененный файл конфигурации в индекс `git`, сделайте коммит и отправьте изменения в удаленную ветку `main`:

    ```bash
    git add .sourcecraft/branches.yaml
    git commit -m "Configured automatic branch cleanup"
    git push -u origin main
    ```

{% note tip %}

Заданное в файле `.sourcecraft/branches.yaml` поведение можно переопределить для отдельного предложения изменений с помощью опции **Удалять ветку-источник после слияния** в блоке **Настройки слияния**. Подробнее на странице [Работа с предложениями изменений в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/pr-work.md).

{% endnote %}

## Включить обход политики веток для администратора репозитория {#bypass}

<!-- source: ru/_includes/sourcecraft/branch-policies-bypass.md -->
{% note warning %}

Обойти правила политики веток, например чтобы поправить конфигурацию в `.sourcecraft/branches.yaml`, могут только пользователи с [ролью](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-repositories-admin) `Администратор репозитория`.

{% endnote %}
<!-- endsource: ru/_includes/sourcecraft/branch-policies-bypass.md -->

1. Откройте [главную страницу](https://sourcecraft.dev) SourceCraft.
1. На вкладке ![image](../../_assets/console-icons/house.svg) **Домой** в секции ![image](../../_assets/console-icons/layout-tabs.svg) **Ваша мастерская** перейдите в раздел ![image](../../_assets/console-icons/archive.svg) **Репозитории**.
1. Выберите репозиторий.
1. На странице репозитория в разделе ![image](../../_assets/console-icons/gear.svg) **Настройки репозитория** перейдите в секцию ![image](../../_assets/console-icons/circle-exclamation.svg) **Общее**.
1. В блоке **Политика защиты веток** включите опцию **Разрешить переопределение**.
1. Нажмите **Обновить настройки**.

#### Полезные ссылки {#see-also}

* [Политики веток в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/branch-policies.md)
* [Правила ревью кода в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/code-review.md)
* [Непрерывная интеграция и непрерывное развертывание в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md)
* [Настроить CI/CD в репозитории SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/ci-cd.md)
* [Настроить правила ревью кода в репозитории SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/code-review.md)
* [Настроить правила ревью кода и политики веток на уровне организации в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/org-config.md)
