---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://sourcecraft.dev/portal/docs/en/sourcecraft/concepts/branch-policies.md
  - https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/branch-policies.md
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/branch-policies-intro.md -->
_Политики веток_ — это набор правил и ограничений, которые применяются к определенным веткам и тегам в [репозитории](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#repos). С помощью политик вы можете контролировать процесс внесения изменений, обеспечивать ревью кода, соблюдать правильность именования и условия создания веток и тегов, а также защищать ветки от случайных коммитов или прямого пуша.
<!-- endsource: ru/_includes/sourcecraft/branch-policies-intro.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 -->

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

<!-- 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 -->

Подробнее в разделе [Включить обход политики веток для администратора репозитория](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/branch-policies.md#bypass).

## Пример конфигурации {#example}

<!-- 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 -->

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

Настройка и просмотр конфигураций репозитория доступны в интерфейсе SourceCraft в разделе <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M7.199 2H8.8a.2.2 0 0 1 .2.2c0 1.808 1.958 2.939 3.524 2.034a.2.2 0 0 1 .271.073l.802 1.388a.2.2 0 0 1-.073.272c-1.566.904-1.566 3.164 0 4.069a.2.2 0 0 1 .073.271l-.802 1.388a.2.2 0 0 1-.271.073C10.958 10.863 9 11.993 9 13.8a.2.2 0 0 1-.199.2H7.2a.2.2 0 0 1-.2-.2c0-1.808-1.958-2.938-3.524-2.034a.2.2 0 0 1-.272-.073l-.8-1.388a.2.2 0 0 1 .072-.271c1.566-.905 1.566-3.165 0-4.07a.2.2 0 0 1-.073-.27l.801-1.389a.2.2 0 0 1 .272-.072C5.042 5.138 7 4.007 7 2.199c0-.11.089-.199.199-.199M5.5 2.2c0-.94.76-1.7 1.699-1.7H8.8c.94 0 1.7.76 1.7 1.7a.85.85 0 0 0 1.274.735 1.7 1.7 0 0 1 2.32.622l.802 1.388c.469.813.19 1.851-.622 2.32a.85.85 0 0 0 0 1.472 1.7 1.7 0 0 1 .622 2.32l-.802 1.388a1.7 1.7 0 0 1-2.32.622.85.85 0 0 0-1.274.735c0 .939-.76 1.7-1.699 1.7H7.2a1.7 1.7 0 0 1-1.699-1.7.85.85 0 0 0-1.274-.735 1.7 1.7 0 0 1-2.32-.622l-.802-1.388a1.7 1.7 0 0 1 .622-2.32.85.85 0 0 0 0-1.471 1.7 1.7 0 0 1-.622-2.32l.801-1.389a1.7 1.7 0 0 1 2.32-.622A.85.85 0 0 0 5.5 2.2m4 5.8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0M11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0" clip-rule="evenodd"/></svg> **Настройки репозитория** в секции <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="m13.874 8.25-2.72 4.712a.5.5 0 0 1-.434.25H5.28a.5.5 0 0 1-.433-.25L2.127 8.25a.5.5 0 0 1 0-.5l2.72-4.712a.5.5 0 0 1 .433-.25h5.44a.5.5 0 0 1 .433.25l2.72 4.712a.5.5 0 0 1 0 .5m1.3-1.25a2 2 0 0 1 0 2l-2.72 4.712a2 2 0 0 1-1.733 1H5.28a2 2 0 0 1-1.732-1L.828 9a2 2 0 0 1 0-2l2.72-4.712a2 2 0 0 1 1.732-1h5.44a2 2 0 0 1 1.732 1zM9.5 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0M11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0" clip-rule="evenodd"/></svg> **Конфигурации**. Подробнее в инструкции [Настроить конфигурации репозитория в виде кода](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/configuration-edit.md).

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

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

В файле `.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/**`.

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

## Схема политики веток в формате JSON {#json-schema}

```json
"branch_protection_policy": {
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "target": {
      "title": "Policy Target",
      "description": "Type of target this policy is applied to",
      "type": "string",
      "enum": [
        "default_branch",
        "branch",
        "tag"
      ]
    },
    "message": {
      "title": "Error message",
      "description": "Custom message that will be displayed if policy is violated",
      "type": "string"
    },
    "rules": {
      "title": "Rules",
      "description": "Set of rules. The 'prevent_all_changes' value is deprecated; use 'prevent_creation' together with 'prevent_update' instead.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "prevent_force_push",
          "prevent_non_pr_changes",
          "prevent_all_changes",
          "prevent_deletion",
          "prevent_creation",
          "prevent_update"
        ]
      }
    },
    "matches": {
      "title": "Glob Match",
      "description": "For tag and branch target, pattern matcher. See globstar patterns for the details",
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    }
  },
  "required": [
    "target",
    "message",
    "rules"
  ]
}
```

<!-- 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 -->

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

* [Настроить политику веток в репозитории SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/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)
