# Git 和团队 (/zh/docs/workspaces/git-and-teams)

工作区是为存入 Git 而写的一个文本文件夹：每个请求一个文件，相同的内容生成相同的字节，里面没有任何私密内容。提交并推送它，你的团队就能基于同样的请求工作，各自使用自己的凭据。

## 为差异而设计的文件 [#files-made-for-diffs]

- **每个请求一个文件**。更改一个请求，只改动一个文件。添加一个请求，只增加一个文件。
- **确定性**。Echolot 每次都以同样的方式写入同样的内容：相同的键、相同的顺序，所以不做更改就存储不会改变任何东西，差异只显示你更改的部分。
- **可读**。请求是 TOML；正文作为单独的文件放在请求旁边（`create-order.body.json`），GraphQL 查询则是 `.graphql`，因此它们的差异按 JSON 和 GraphQL 显示，而不是转义后的字符串。
- **顺序记在文件夹文件中**。文件夹中项目的顺序是其 `_folder.toml` 里的一个列表，而不是文件名的一部分，所以重新排序只改动一行。
- **你的注释会保留**。你手动写在文件里的注释（`# why this header`）在 Echolot 存储时会保留：顶部的注释块、键或表上方的注释，以及值后面的注释。针对已不存在的键的注释会被丢弃。

重新命名请求会同时重新命名它的文件，以及旁边的正文和脚本文件。重新命名环境则保留它的文件名。

## 提交什么 [#what-to-commit]

提交整个工作区文件夹。里面没有需要忽略的内容：Echolot 绝不会把机密值、历史记录、响应正文或你的个人设置写进去。

| 在工作区中（共享） | 仅在你的 Mac 上（不共享） |
| --- | --- |
| 请求、文件夹、它们的顺序、文档、认证和脚本 | 机密值，在钥匙串中 |
| 变量及其非机密值 | 全局变量 |
| 环境，以及哪些是受保护的 | 使用中的环境 |
| MCP 服务器、规范、模拟、流程 | 历史记录和响应正文 |
| 工作区的智能体规则、代理和证书 | 窗格布局和其他 App 设置 |
| 你选择共享的助手对话 | 你信任了哪些脚本和智能体规则 |

请保持 `workspace.toml` 中的工作区 ID 不变。Echolot 靠它找到每个人的机密值。

<Callout type="warn">
  直接输入在字段中、而不是通过机密变量设置的值，会原样写入文件。Echolot 会在包含这类值的认证和代理字段下方发出警告（**以纯文本形式存储在工作区文件中。**）；提交之前请点按**移到钥匙串**。见[机密](/docs/workspaces/secrets)。
</Callout>

## 开始共享 [#start-sharing]

1. 把工作区放进 Git 仓库：在 `.echolot` 文件夹中创建仓库，或把工作区作为文件夹保留在项目的仓库内。任何带有 `workspace.toml` 的文件夹都能在 Echolot 中打开。
2. 提交并推送。
3. 同事克隆仓库，并用**文件 › 打开工作区…** 打开工作区。
4. 每位同事在自己的 Mac 上设置一次机密值：[环境](/docs/workspaces/environments)页面会为每一个显示**未在这台 Mac 上设置**。

命令行工具读取同样的文件，因此 CI 会运行你提交的请求。见[在 CI 中测试](/docs/tutorials/test-in-ci)。

## 来自 Git、编辑器和智能体的更改 [#changes-from-git-editors-and-agents]

Echolot 会监视工作区文件夹。文件在 Echolot 之外发生变化时（`git pull`、切换分支、编辑器、智能体），窗口会重新载入它们：边栏、打开的请求、环境、规范、模拟和流程会立即随之更新。

没有未存储编辑的已打开请求会直接采用新版本，不会询问。

请求的标签页中有未存储的编辑时，Echolot 不会偏向任何一方。请求上方会出现一个栏：**此请求已在磁盘上更改**，“你在此处有未存储的编辑时，另一个 App 或 Git 更改了该文件。”

- **保留我的版本**保留标签页中的编辑，并把它们写到文件上。
- **使用文件中的版本**丢弃标签页中的编辑，并从磁盘载入该文件。

在你选择之前，Echolot 不会存储这个请求，因此磁盘上的更改保持原样。

### 冲突期间关闭标签页 [#closing-a-tab-during-a-conflict]

如果你在选择之前关闭标签页，Echolot 会询问：**你有未存储的编辑时，“Create order”已在磁盘上更改**。“关闭标签页后只会保留一个版本。”请选择**保留我的版本**、**使用文件中的版本**，或选择**取消**以保持标签页打开。
在冲突尚未解决时关闭窗口或退出，Echolot 会告诉你这项编辑无法存储，并在放弃它之前先询问，因此未经你同意，两个版本都不会丢失。

### 合并冲突 [#merge-conflicts]

请在你的编辑器或 Git 工具中解决 Git 合并冲突，就像处理任何文本文件一样。仍含有冲突标记的文件不是有效的 TOML。文件无法读取期间，已打开的窗口会保留之前读取的内容；打开该工作区则会失败，欢迎窗口中的信息会指出文件名：“…”无法读取。修复该文件，工作区就能再次读取。

## 来自 Git 的脚本和智能体规则 [#scripts-and-agent-rules-from-git]

脚本可以发送请求并读取工作区的变量，因此 Echolot 只有在你于自己的 Mac 上信任脚本之后才会运行它。你在 Echolot 中编写的脚本是受信任的。通过 Git、导入或其他编辑器到达的脚本，或其代码在那里被更改过的脚本，会显示**这些脚本来自 Echolot 之外**，直到你阅读它并点按**信任脚本**。见[脚本和测试](/docs/requests/scripts-and-tests)。

工作区的智能体规则也是如此：文件中收紧智能体权限的规则立即生效；放宽权限的规则，要在你于自己的 Mac 上信任该版本之后才算数。见[智能体](/docs/ai/agents)。

## 不用 Git 共享 [#sharing-without-git]

要把工作区交给不使用 Git 的人，请将其[导出](/docs/workspaces/exporting)为 **Echolot 工作区**。副本会获得新的 ID，所以它的机密与你的互相独立，机密值也绝不会写进去。

在访达中拷贝工作区文件夹会保留它的 ID。在同一台 Mac 上，副本和原件会从钥匙串读取相同的机密值。
