# 单一代码库（Monorepos）

GitBook 支持 monorepo。monorepo 是包含多个逻辑项目（例如 iOS 客户端和 Web 应用）的仓库。

GitBook 可以将同一仓库的多个目录与多个空间同步。在为某个空间启用 Git 同步时，你可以配置“项目目录”。它将用于查找 `.gitbook.yaml` 用于与此空间同步的目录的文件。

仓库结构示例：

```
/
  package.json
  packages/
     styleguide/
        .gitbook.yaml
        README.md
        SUMMARY.md
     app/
        README.md
        SUMMARY.md
     api/
        .gitbook.yaml
        README.md
        SUMMARY.md
```

在此示例中，可以在 GitBook 上创建 3 个空间并配置为不同的根目录：

* `packages/styleguide`
* `packages/app`
* `packages/api`

Git 同步级别的“项目目录”选项不同于 [`root` 选项](https://gitbook-v2-3sscp147r-gitbook.vercel.app/url/gitbook.com/docs/documentation/zh/ru-men/content-configuration#root) 在 `.gitbook.yaml` 配置文件。第一个用于查找 `.gitbook.yaml` 本身，然后两者结合用于查找目录中的其他文件。如果在“项目目录”中不存在 `.gitbook.yaml` 则同步将使用作用于该目录的默认配置。

## 更新项目目录 <a href="#updating" id="updating"></a>

{% hint style="info" %}
在大多数情况下，我们建议采取以下步骤来更新项目目录：

1. 禁用现有的 Git 同步
2. 将 Git 仓库中的文件移动到项目目录
3. 使用新的项目目录重新配置 Git 同步
   {% endhint %}

在某些情况下，你可能最初使用典型仓库仅与一个空间同步，但随后决定转换为一个具有多个同步空间的 monorepo；或者可能需要重命名项目目录。

在现有 Git 同步上更改项目目录可能会对内容产生意外影响，该更改仅会在下次同步期间传播（在 GitBook 上的编辑或 Git 仓库中的新提交）。

#### **如果下一步操作是从 Git 仓库导入**:

GitBook 将期望在项目目录中找到页面和文件。如果文件尚未被移动到仓库的项目目录中，则同步的结果可能是一个没有内容的空空间。

我们建议下一步操作为提交，将所有与 GitBook 相关的文件（Markdown 文件、README/SUMMARY 和资源）从仓库移动到其在项目目录中的正确新位置。

**如果下一步操作是从 GitBook 导出到 Git 仓库**:

GitBook 将在新的项目目录中生成或更新新文件。与 GitBook 同步的文件将被移动到新的项目目录（会尽最大努力）；如果系统的其他部分依赖这些文件，可能会产生副作用。
