# gt: General Translation CLI tool: Ветвление
URL: https://generaltranslation.com/ru/docs/cli/branching.mdx
---
title: Ветвление
description: Отслеживайте переводы отдельно для разных веток Git
---
## Обзор
Ветвление позволяет отдельно отслеживать переводы для разных git-веток в проекте.
Это полезно, если вы работаете в feature-ветках, где добавляется новый контент или меняется существующий текст, и хотите, чтобы эти переводы оставались изолированными от основной ветки, пока не будет выполнено слияние изменений.
Когда ветвление включено, CLI автоматически определяет текущую git-ветку и связывает переводы с ней.
Переводы, созданные в feature-ветке, не повлияют на ваши продакшен-переводы, пока вы не выполните слияние.
Ветвление — функция GT Cloud и доступно только на платном тарифе. Если вы попытаетесь создать ветку, отличную от ветки по умолчанию, без платного тарифа, CLI вернется к использованию ветки по умолчанию.
***
## Использование
Чтобы включить ветвление, используйте флаг `--enable-branching` вместе с командой `translate`:
```bash
npx gt translate --enable-branching
```
По умолчанию CLI автоматически определяет текущую ветку Git. Если вместо этого вы хотите указать собственное название ветки:
```bash
npx gt translate --enable-branching --branch my-feature-branch
```
***
## Флаги
| Флаг | Описание |
| ---------------------------- | ------------------------------------------------------------------------------------------------------ |
| `--enable-branching` | Включает ветвление для проекта. Требуется для отслеживания переводов на основе веток. |
| `--branch ` | Указывает пользовательское имя ветки вместо автоматического определения из git. |
| `--disable-branch-detection` | Отключает автоматическое определение связей между ветками. Использует только ветку, указанную вручную. |
***
## Как это работает
Когда ветвление включено, CLI выполняет следующее:
1. **Определяет текущую ветку**: С помощью git определяет, в какой ветке вы сейчас находитесь.
2. **Определяет ветку по умолчанию**: Определяет, какая ветка является веткой по умолчанию (обычно `main` или `master`), проверяя удалённый HEAD.
3. **Отслеживает связи между ветками**: Определяет, для каких веток было выполнено слияние с текущей веткой (входящие ветки), а также ветку, от которой была создана текущая ветка (родительскую ветку).
4. **Связывает переводы с ветками**: Все переводы помечаются текущей веткой, чтобы хранить их отдельно от переводов в других ветках.
5. **Наследует переводы из родительских веток**: Когда вы создаёте новую ветку, переводы автоматически наследуются из родительской ветки, поэтому их не нужно переводить повторно и с вас не списывается плата дважды.
### Наследование переводов
При работе в feature-ветке CLI отслеживает:
* **Входящие ветки**: ветки, которые были слиты с вашей текущей веткой. Это позволяет учитывать переводы из уже слитых веток.
* **Исходная ветка**: ветка, от которой была создана текущая ветка (обычно это ветка по умолчанию). Благодаря этому feature-ветка наследует существующие переводы.
Это означает, что, когда вы создаёте новую feature-ветку от `main`, она получает доступ ко всем существующим переводам из `main`. Все новые переводы, которые вы создаёте, будут связаны с вашей feature-веткой, пока она не будет слита.
После слияния feature-ветки обратно в `main` переводы из feature-ветки автоматически переносятся в `main`.
***
## Конфигурация
Параметры ветвления можно настроить в файле `gt.config.json`:
```json title="gt.config.json"
{
"branchOptions": {
"enabled": true,
"currentBranch": "my-feature-branch",
"autoDetectBranches": true,
"remoteName": "origin"
}
}
```
| Свойство | Описание | По умолчанию |
| -------------------- | ------------------------------------------------------------------------ | ------------ |
| `enabled` | Включить поддержку веток для проекта | `false` |
| `currentBranch` | Задать имя текущей ветки вручную (вместо автоопределения) | `undefined` |
| `autoDetectBranches` | Автоматически определять связи между ветками (входящие и исходные ветки) | `true` |
| `remoteName` | Имя удалённого репозитория, используемое для определения веток | `"origin"` |
Флаги CLI имеют приоритет над параметрами в файле конфигурации. Например, `--enable-branching` переопределит `branchOptions.enabled`, а `--disable-branch-detection` — `branchOptions.autoDetectBranches`.
***
## Пример рабочего процесса
Вот типичный рабочий процесс с использованием ветвления:
1. **Создайте feature-ветку**:
```bash
git checkout -b feature/new-landing-page
```
2. **Добавьте новый переводимый контент** в свою feature-ветку.
3. **Запустите перевод с включённым ветвлением**:
```bash
npx gt translate --enable-branching
```
CLI определит, что вы находитесь в `feature/new-landing-page`, и свяжет все новые переводы с этой веткой.
4. **Продолжайте работу над своей веткой** — все дополнительные переводы останутся в вашей feature-ветке.
5. **Слейте свою feature-ветку** в `main`:
```bash
git checkout main
git merge feature/new-landing-page
```
6. **Запустите translate в main**:
```bash
npx gt translate --enable-branching
```
CLI обнаружит переводы из `feature/new-landing-page` и включит их в `main`.
***
## Устранение неполадок
### Ветка не определена
Если CLI не может определить текущую ветку, вы можете указать её вручную:
```bash
npx gt translate --enable-branching --branch my-branch
```
### Использование нестандартного удалённого репозитория
Если ваш Git-репозиторий использует удалённый репозиторий не с именем `origin`, укажите его имя в конфигурации:
```json title="gt.config.json"
{
"branchOptions": {
"remoteName": "upstream"
}
}
```
или используйте флаг `--remote-name`:
```bash
npx gt translate --enable-branching --remote-name upstream
```
### Отключение определения связей между ветками
Если вы хотите использовать только текущую ветку и не отслеживать входящие или родительские ветки:
```bash
npx gt translate --enable-branching --branch my-branch --disable-branch-detection
```