# 叉子

了解派生如何通过创建与原始存储库相连、但具有各自设置和权限的独立存储库来实现独立协作。

派生仓库是最初作为另一个仓库的副本创建的仓库，另一个仓库称为上游仓库。 分支具有自己的设置和权限，但会一直连接到上游存储库。

当您在 GitHub 上查看某个派生仓库时，其上游仓库会标示在该派生仓库名称下方。

## 分叉与分支有何不同

分支是一个存储库的一部分。 分叉是一个单独的存储库，其自己的设置和协作空间。

每个分叉可以有自己的分支：

* 分支
* 成员和讨论
* 议题和拉取请求
* 操作和项目
* 标记、标签和 Wiki

## 可将哪些存储库进行分叉？

如果存储库和企业策略设置允许创建分支，则可以将专用或内部存储库分支到个人帐户或分支到你拥有存储库创建权限的 GitHub 上的组织。

通常，可以将任何公共存储库分支到个人帐户或分支到你有权创建存储库的组织，除非你是 具有托管用户的企业 的成员。

存储库、组织和企业策略可以限制是否可以创建存储库分叉和创建分支的位置。 对于专用 存储库和内部 存储库，对分叉的访问权限也取决于存储库可见性、组织成员资格和管理员设置。

如果你是某个 具有托管用户的企业成员，则其他限制适用于可以分叉的存储库。

托管用户帐户 无法从企业外部创建分支存储库。 它们可以将企业中组织所拥有的专用或内部存储库的分支创建到其用户帐户命名空间或企业拥有的其他组织，具体由企业策略规定。
请参阅文档中的 [](/zh/enterprise-cloud@latest/admin/concepts/identity-and-access-management/enterprise-managed-users)

请参阅 [管理组织的复刻政策](/zh/enterprise-cloud@latest/organizations/managing-organization-settings/managing-the-forking-policy-for-your-organization) 和 [在企业中实施仓库管理策略](/zh/enterprise-cloud@latest/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-forking-private-or-internal-repositories)。

## 分叉的可见性

分支的可见性与上游存储库的存储库网络相关联。 公共存储库分支是公共的，专用存储库分支是专用的。 内部存储库的分支是专用的。 不能自行更改分叉的可见性。

存储库网络中的所有存储库共享相同的可见性设置。 存储库网络包括上游存储库、其分支和这些分支的分支。 请参阅“[了解仓库之间的连接](/zh/enterprise-cloud@latest/repositories/viewing-activity-and-data-for-your-repository/understanding-connections-between-repositories)”。

删除存储库或更改其可见性可能会影响网络。 如果删除分叉，则存储库网络仍可访问该分叉中的代码贡献。

## 删除存储库或更改可见性时分支会发生什么情况

> \[!WARNING]
>
> * 如果您移除某人对私有仓库的访问权限，则其基于该私有仓库创建的所有派生仓库也会被删除。 私有仓库的本地克隆副本将被保留。 如果撤销团队对专用存储库的访问权限，或者删除有权访问专用存储库的团队，并且团队成员不能通过另一个团队访问存储库，则会删除存储库的专用分支。
> * 您负责确保无法访问仓库的人员删除任何机密信息或知识产权。
> * 拥有对专用 或内部 存储库的管理员权限的人员可以禁止对该存储库进行分叉，组织所有者可以禁止对组织中的任何专用 或内部 存储库进行分叉。 有关详细信息，请参阅 [管理组织的复刻政策](/zh/enterprise-cloud@latest/organizations/managing-organization-settings/managing-the-forking-policy-for-your-organization) 和 [管理仓库的复刻政策](/zh/enterprise-cloud@latest/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/managing-the-forking-policy-for-your-repository)。

可见性更改可以将分支分隔到新的存储库网络中，以便现有分支所有者可以继续工作，而不会意外丢失访问权限。

| Action     | 对分叉的影响                  |
| ---------- | ----------------------- |
| 已删除专用存储库   | 还会删除其专用分支。              |
| 删除公共存储库    | 活动公共分支将成为网络的新上游存储库。     |
| 公开仓库被设为私有  | 其公共分支在单独的网络中保持公共状态。     |
| 专用存储库公开    | 专用分支保持专用，但断开连接到单独的专用网络。 |
|            |                         |
| 内部存储库更改可见性 | 组织或个人帐户拥有的分支保持私密。       |
|            |                         |

将公开仓库更改为私有仓库也会影响星标、关注者、依赖关系图、Dependabot alerts 和 code scanning 的可用性。 在更改存储库之前，请仔细查看存储库可见性设置。

## 分叉的权限

专用分支继承上游存储库的权限结构。 这有助于私有仓库的所有者保持对其代码的控制。 例如，如果上游仓库是私有的，并授予团队读/写访问权限，则同一团队对该私有上游仓库的任何复刻拥有读/写权限。 专用分支仅继承团队权限（而不是个人权限）。

> \[!NOTE]
> 更改组织的基本权限时，不会对专用分支的权限进行自动更新。 有关详细信息，请参阅“[为组织设置基本权限](/zh/enterprise-cloud@latest/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/setting-base-permissions-for-an-organization#about-base-permissions-for-an-organization)”。

公共分支不继承上游存储库的权限结构。 分叉所有者控制对其分支的访问，但存储库网络仍共享 Git 数据。 推送到某个网络中任一仓库的提交，都可能被该网络中的其他仓库访问到，包括上游仓库。

将公共存储库分叉到个人帐户时，可以允许上游存储库的维护人员推送到拉取请求分支。 这有助于维护人员在合并之前更新分支、运行测试或解决小问题。 不能向组织拥有的分支授予推送权限。 请参阅“[Allowing changes to a pull request branch created from a fork](/zh/enterprise-cloud@latest/pull-requests/how-tos/work-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork)”。

### 分支存储库的推送规则集

推送规则适用于存储库的整个分支网络，以确保存储库的每个入口点均受到保护。 例如，如果将已启用推送规则集的存储库创建为分支，则相同的推送规则集也适用于已创建分支的存储库。

对于已创建分支的存储库，只有对推送规则具有旁路权限的人员是根存储库中具有旁路权限的人员。

请参阅“[关于规则集](/zh/enterprise-cloud@latest/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets#push-rulesets)”。

### 重要的安全注意事项

分支是功能强大的协作工具，但它们可以通过易于忽略的方式公开代码和历史记录。

* 分支具有其自己的权限，这些权限独立于上游存储库。
* 上游存储库的所有者可以读取存储库网络中的所有分支。
* 组织所有者可能具有对个人命名空间中创建的分支的管理访问权限。
* 删除某人对上游存储库的访问权限并不总是删除其他组织中的分支。
* 即使在删除分叉后，提交仍可在存储库网络中保持可访问性。

在允许敏感工作分支之前，请查看存储库或组织的权限和可见性模型。

### 组织内的分叉

同一组织中的分支从上游存储库复制协作者和团队设置。 组织控制这些分支的权限，现有可见团队可能会保留访问权限。

### 企业内部的派生版本

内部存储库支持单一级别的分叉。 不能为内部存储库的专用分支分叉。 这样，企业中可见的存储库的访问和管理更简单。