---
title: 联合
description: 让几个 Raft server 互认彼此 agent 的批准，并在一个视图里看到各成员的 PR 和等你处理的申请。
llms_section: "管理员"
llms_order: 1070
llms_summary: "server 的 owner 或 admin 想新建、加入联合时，或者有人要跨几个 Raft server 协作时读这里。"
---

# 联合

联合就是几个 Raft server 约好：互相承认对方 agent 给出的批准。

每个 server 还是各管各的：设置、成员、数据都不共享。加入联合只决定一件事：谁的批准在谁的 PR 上算数。

::: tip 提示
只有你们 Raft server 的 **owner（所有者）或 admin（管理员）** 能新建、加入或退出联合。server 里的每个人都能看到本 server 的联合情况。
:::

## 在哪里操作

进入 **设置 → 联合**（`/settings/federation`）。

还没加入任何联合时，页面会写着「**本服务器还没有加入联合。**」。你可以在这里新建联合、申请加入别人的联合，或者处理收到的邀请。

开始之前确认三件事：

- 你们 server 要先有 GitHub App。没有 App，批准没法在它身上算数，Stamp 会直接拒绝。先去配好，见 [GitHub App](/zh-cn/github-app/)。
- 你的登录要在 24 小时以内。超过一天，页面会提示你退出后重新用 Raft 登录。
- 一个 server 同一时间只能在一个联合里。想换联合，先退出现在这个。

## 新建联合

1. 在「**新建联合**」下填一个 **名称**（1 到 100 个字符）。
2. 点「**新建联合**」。

你们 server 就是第一个成员。页面上会显示 **联合 ID**（以 `fed_` 开头），点「**复制 ID**」，发给要加入的 server。

## 让别的 server 加入

有两条路，哪条走完对方都会立刻成为成员。

### 你去邀请对方

1. 在 **设置 → 联合** 的「**邀请服务器**」下，填对方的 **服务器名称或 ID**。名称就是它 Raft 地址里的那个名字。
2. 想留言就填 **备注（可选）**，然后点「**发送邀请**」。

只有对方 server 上有人登录过 Stamp，Stamp 才认识它。如果同名的 server 不止一个，就改用 ID 邀请。

对方的 owner 或 admin 会在他们自己的 **设置 → 联合** 里看到「**收到的邀请**」。点「**接受或拒绝**」，在邀请页面上选「**接受**」或「**拒绝**」，期限是 7 天。邀请还没处理时，任一成员 server 的 owner 或 admin 都可以在邀请页面撤回。

### 对方申请加入

1. 先找某个成员 server 的 owner 或 admin 要 **联合 ID**。
2. 在你们的 **设置 → 联合** 的「**申请加入联合**」下，粘贴 **联合 ID**，可以写 **备注（可选）**，点「**申请加入**」。

申请会显示在你们页面的「**等待加入**」里；联合那边会显示在「**待处理的加入申请**」里。任一成员 server 的 owner 或 admin 点「**去处理**」，在申请页面上选「**批准**」或「**拒绝**」。

如果你同时也是某个成员 server 的 owner 或 admin，你们 server 会直接加入。

### 不是 owner 或 admin？

你也可以先发起。在「**申请加入联合**」下粘贴 ID，点「**请管理员申请加入**」。你们 server 的 owner 和 admin 会在「**成员请求加入联合**」里看到它。其中一人批准后，Stamp 以他的名义提交加入申请，再由成员 server 决定。

## 退出联合

1. 在 **设置 → 联合** 的「**退出联合**」下，点「**退出联合…**」。
2. 输入联合的名称确认，再点「**退出联合**」。

立即生效，不需要其他成员同意。

- 其他 server 的 agent 的批准不再计入你们的 PR，你们 agent 的批准也不再计入他们的。
- 其他 server 还留在联合里。想回来，就重新申请加入，等成员批准。

页面上的「**历史记录**」会列出谁在什么时候新建、加入、退出。

## 加入联合后有什么变化

### 批准跨 server 算数

其他成员 server 的 agent 给出的批准，在你们的 PR 上和你们自己 agent 的批准一样算数；反过来也一样。前提是：

- 两边 server 的 GitHub App 都覆盖这个仓库；
- PR 当前的 head 是经 Stamp 推送的。

在任何成员 server 上开过或推送过这个 PR 的 agent，仍然不能批准它。见 [评审与合入](/zh-cn/review-and-merge/)。

### 对某个仓库关掉

默认每个仓库都计入联合成员的批准。想让某个仓库只算你们自己 server 的批准：

1. 打开这个仓库的 **仓库设置 → 审批**（`/github/<owner>/<repo>/settings/reviews`）。
2. 在「**联合成员的批准**」下，关掉「**计入本 server 所在联合中其他成员的 agent 的批准**」。

只有你们 server 的 owner 或 admin 能看到并修改这一项。这里也会写明你们 server 在哪个联合、和哪些 server 在一起。谁在什么时候打开或关掉，页面的历史里都有记录。

### 其他 server 的人和 agent 有标记

Stamp 每次提到其他成员 server 的人或 agent，名字后面都会跟一个写着那个 server 名字的标签。鼠标悬停能看到完整说明。

### 你能看到成员的 PR

在你们自己 GitHub App 覆盖的仓库里，仓库页面和 PR 列表也会列出其他成员 server 经 Stamp 开的 PR，每一行都注明来自哪个 server。

这些 PR 用你们自己 server 的 App 读取。你在上面做的任何操作（批准、合入、评论）都按你们自己 server 的规则来。

## 联合视图

在 **设置 → 联合** 里点「**打开联合视图**」，地址是 `/f/<联合>`。只有已登录、且所在 server 是成员的人才能打开。

里面有：

- **成员服务器**：每个都链接到那个 server 自己的地址，你们的那个标着「**本服务器**」。
- **等你处理的申请**：顶栏的权限申请角标会链接到联合的申请列表。里面有你们 server 自己的申请，以及成员 server 上指名你的 act-as 申请，每条都标着来自哪个 server。可以直接在列表里点「**批准**」或「**拒绝**」。见 [权限申请](/zh-cn/requests/)。
- **从这里打开的仓库和 PR 页面**：会显示每个成员 server 的 Stamp 活动。

在这里做不了的事：设置、申请自己的详情页，以及其他按 server 区分的页面，都还在你们 server 自己的地址下（`/s/<你们的 server>/…`），联合视图会把你带回那里。点「**本服务器的联合设置**」可以回到 **设置 → 联合**。

## 代表另一个 server 上的人操作

agent 可以申请代表某个人在一个仓库上操作（act-as 申请）。在联合里，这个人可以是只在另一个成员 server 上登录过 Stamp 的人。

- 他在自己的 server 上批准，或者在联合视图的申请列表里批准。
- 授权只覆盖这一个仓库。
- 两个 server 不再同属一个联合时，授权失效；还没处理的申请会被关闭，agent 需要重新申请。
