# gt: General Translation CLI tool: 分支功能
URL: https://generaltranslation.com/zh/docs/cli/branching.mdx
---
title: 分支功能
description: 为不同的 Git 分支分别跟踪翻译
---
## 概述
分支功能可让你分别跟踪项目中不同 git 分支的翻译。
当你在功能分支上开发、引入新内容或修改现有文本,并希望在功能合并到主分支之前将这些翻译与主分支隔离时,这项功能就很有用。
启用分支功能后,CLI 会自动检测你当前所在的 git 分支,并将翻译关联到该分支。
在功能分支上创建的翻译,在合并之前不会影响生产环境中的翻译。
分支功能是 GT Cloud 的特性之一,且需要付费套餐。如果你在未开通付费套餐的情况下尝试创建非默认分支,CLI 会回退到使用默认分支。
***
## 用法
要启用分支功能,请在 `translate` 命令中使用 `--enable-branching` 标志:
```bash
npx gt translate --enable-branching
```
默认情况下,CLI 会自动检测你当前所在的 git 分支。如果你想改为手动指定自定义分支名:
```bash
npx gt translate --enable-branching --branch my-feature-branch
```
***
## 标志
| Flag | Description |
| ---------------------------- | ----------------------------- |
| `--enable-branching` | 为项目启用分支功能。使用基于分支的翻译跟踪时,此项为必需。 |
| `--branch ` | 指定自定义分支名称,而不是由 git 自动检测。 |
| `--disable-branch-detection` | 禁用分支关系的自动检测。仅使用手动指定的分支。 |
***
## 工作原理
启用分支功能后,CLI 会执行以下操作:
1. **检测当前分支**:使用 git 确定你当前所在的分支。
2. **识别默认分支**:通过检查远程 HEAD 引用,确定默认分支是哪个 (通常为 `main` 或 `master`) 。
3. **跟踪分支关系**:识别哪些分支已合并到当前分支 (传入分支) ,以及当前分支是从哪个分支检出的 (父分支) 。
4. **将翻译与分支关联**:所有翻译都会带上当前分支的标记,从而与其他分支区分开来。
5. **继承父分支的翻译**:创建新分支时,会自动继承父分支的翻译,因此无需重新翻译,也不会被重复收费。
### 翻译继承
在功能分支上工作时,CLI 会跟踪以下内容:
* **传入分支**:已合并到当前分支的分支。这样可以纳入这些已合并分支中的翻译。
* **已检出分支**:当前分支创建时所基于的分支 (通常是默认分支) 。这样你的功能分支就能继承已有翻译。
这意味着,当你从 `main` 创建新的功能分支时,该分支将能够访问 `main` 中所有已有的翻译。你创建的任何新翻译都会关联到该功能分支,直到它被合并。
当功能分支合并回 `main` 后,该功能分支中的翻译也会自动合并到 `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` | 用于检测分支的 Git 远程仓库名称 | `"origin"` |
CLI 标志的优先级高于配置文件选项。例如,`--enable-branching` 会覆盖 `branchOptions.enabled`,而 `--disable-branch-detection` 会覆盖 `branchOptions.autoDetectBranches`。
***
## 示例工作流
以下是一个使用分支的典型工作流:
1. **创建功能分支**:
```bash
git checkout -b feature/new-landing-page
```
2. **将新的可翻译内容添加到**功能分支中。
3. **启用分支功能运行 translate**:
```bash
npx gt translate --enable-branching
```
CLI 会检测到你当前位于 `feature/new-landing-page`,并将所有新翻译关联到该分支。
4. **继续迭代你的功能** - 后续新增的翻译都会保留在该功能分支上。
5. **将功能分支合并到** `main`:
```bash
git checkout main
git merge feature/new-landing-page
```
6. **在 main 上运行 translate**:
```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
```