跳至主要内容

分叉仓库

分叉是一个新的仓库,它与原始上游仓库共享代码和可见性设置。

平台导航

关于分叉

A fork 是一个新仓库,它与原始的“上游”仓库共享代码和可见性设置。Fork 通常用于在向上游仓库提交更改之前,对想法或修改进行迭代,例如在开源项目中,或当用户没有上游仓库的写入权限时。更多信息,请参阅 使用 Fork 的工作方式

向他人的项目提出更改

例如,你可以使用 Fork 来提出与修复错误相关的更改。与其为你发现的错误创建 Issue,你可以

  • Fork 该仓库。
  • 进行修复。
  • 向项目所有者提交 Pull Request。

使用他人的项目作为你自己想法的起点

开源软件基于通过共享代码可以打造更好、更可靠的软件的理念。欲了解更多,请参阅开源倡议组织网站上的 关于开源倡议组织

有关在 GitHub 上将开源原则应用于组织开发工作的更多信息,请参阅 GitHub 的白皮书《innersource 入门》。

当你从他人的项目 Fork 创建公共仓库时,请务必包含一个许可证文件,以确定你希望项目如何与他人共享。更多信息,请访问 选择开源许可证(choosealicense.com)。

关于开源的更多信息,尤其是如何创建和发展开源项目,我们制作了 开源指南,帮助你通过推荐最佳实践来构建健康的开源社区并维护项目仓库。你还可以免费参加 GitHub Skills 课程,学习如何维护开源社区。

先决条件

如果尚未完成,请先在本地 Git 中设置 Git 与 GitHub.com 的身份验证。更多信息,请参阅 设置 Git

分叉仓库

你可能会 Fork 项目以向上游仓库提出更改。在这种情况下,定期将你的 Fork 与上游仓库同步是一种良好的实践。为此,你需要在命令行中使用 Git。你可以使用刚刚 Fork 的相同 octocat/Spoon-Knife 仓库来练习设置上游仓库。

  1. 在 GitHub 上,前往 octocat/Spoon-Knife 仓库。

  2. 在页面右上角,单击 Fork

    Screenshot of the main page of repository. A button, labeled with a fork icon and "Fork 59.3k," is outlined in dark orange.

  3. 在 “Owner” 下,打开下拉菜单并选择 Fork 后仓库的拥有者。

  4. 默认情况下,Fork 的名称与其上游仓库相同。若想进一步区分你的 Fork,可在 “Repository name” 字段中输入自定义名称。

  5. 可选地,在 “Description” 字段中输入对你的 Fork 的描述。

  6. 可选地,选中 仅复制默认分支(DEFAULT)

    在许多 Fork 场景(如为开源项目贡献)中,你只需复制默认分支。如果不选此项,则所有分支都会复制到新 Fork 中。

  7. 单击 Create fork

注意

如果想复制上游仓库的其他分支,可在 Branches 页面进行操作。更多信息,请参阅 在仓库内创建和删除分支

注意

要了解更多关于 GitHub CLI 的信息,请参阅 关于 GitHub CLI

要 Fork 一个仓库,请使用 gh repo fork 子命令。

gh repo fork REPOSITORY

要在组织中创建 Fork,请使用 --org 标志。

gh repo fork REPOSITORY --org "octo-org"

你可以在 GitHub.com 或 GitHub Desktop 上 Fork 仓库。有关在 GitHub.com 上 Fork 的信息,请参阅 本文的网页版

在 GitHub Desktop 中,如果您克隆了一个自己没有写入权限的仓库,然后尝试向该仓库推送更改,系统会为您创建一个分叉。

  1. File 菜单中,点击 Clone Repository

    Screenshot of the menu bar on a Mac. The "File" dropdown menu is expanded, and the "Clone Repository" option is highlighted with an orange outline.

    Screenshot of the "GitHub Desktop" menu bar on Windows. The "File" dropdown menu is expanded, and the "Clone Repository" option is outlined in orange.

  2. 点击对应于您想克隆的仓库所在位置的标签页。本例中,我们点击 URL 标签页。

    Screenshot of the "URL" tab of the "Clone a repository" window. The "GitHub.com", "GitHub Enterprise" and "URL" tabs are outlined in dark orange.

  3. 输入要克隆的仓库的 URL 或路径。

    Screenshot of the "URL" tab of the "Clone a repository" window. The input containing "octocat/Spoon-Knife" is highlighted with an orange outline.

  4. 要选择要克隆到的本地目录,请在 “Local Path” 字段旁点击 Choose... 并导航到目标目录。

    Screenshot of the "URL" tab of the "Clone a repository" window. A button, labeled "Choose", is highlighted with an orange outline.

  5. 在 “Clone a Repository” 窗口底部,点击 Clone

  6. 要创建分叉,请尝试向该仓库推送更改。例如,创建一个新分支并发布它。系统会弹出提示,询问您是否要分叉此仓库。

    Screenshot of the "Create a fork prompt" window. A button, labeled "Fork this repository", is highlighted with an orange outline.

  7. 阅读 “您计划如何使用此分叉?” 窗口中的信息。

    • 如果您计划将此分叉用于向原上游仓库贡献,请点击 To contribute to the parent project(为父项目做贡献)。
    • 如果您计划将此分叉用于与上游无关的项目,请点击 For my own purposes(用于我自己的目的)。
  8. 点击 Continue(继续)。

克隆已 Fork 的仓库

目前,你已有 Spoon‑Knife 仓库的 Fork,但本地计算机上尚未拥有该仓库的文件。

  1. 在 GitHub 上,前往 你的 Fork(即 Spoon‑Knife 仓库)。

  2. 在文件列表上方,点击 代码

    Screenshot of the list of files on the landing page of a repository. The "Code" button is highlighted with a dark orange outline.

  3. 复制该仓库的 URL。

    • 要使用 HTTPS 克隆仓库,请在“HTTPS”下点击.

    • 要使用 SSH 密钥克隆仓库(包括由您组织的 SSH 证书颁发机构签发的证书),点击 SSH,然后点击.

    • 要使用 GitHub CLI 克隆仓库,点击 GitHub CLI,然后点击.

      Screenshot of the "Code" dropdown menu. To the right of the HTTPS URL for the repository, a copy icon is outlined in dark orange.

  4. 打开 终端终端Git Bash

  5. 将当前工作目录切换到希望放置克隆目录的位置。

  6. 输入 git clone,随后粘贴之前复制的 URL。它的形式类似于下面这样,只需将其中的 YOUR-USERNAME 替换为你的 GitHub 用户名。

    git clone https://github.com/YOUR-USERNAME/Spoon-Knife
    
  7. Enter 键。将创建本地克隆。

    $ git clone https://github.com/YOUR-USERNAME/Spoon-Knife
    > Cloning into `Spoon-Knife`...
    > remote: Counting objects: 10, done.
    > remote: Compressing objects: 100% (8/8), done.
    > remote: Total 10 (delta 1), reused 10 (delta 1)
    > Unpacking objects: 100% (10/10), done.
    

克隆已 Fork 的仓库

目前,你已有 Spoon‑Knife 仓库的 Fork,但本地计算机上尚未拥有该仓库的文件。

注意

要了解更多关于 GitHub CLI 的信息,请参阅 关于 GitHub CLI

要克隆你的 Fork,使用 --clone 标志。

gh repo fork REPOSITORY --clone=true

配置 Git 将你的 Fork 与上游仓库同步

当你 Fork 项目以向上游仓库提出更改时,可以配置 Git 将上游仓库的更改拉取到本地的 Fork 克隆中。

  1. 在 GitHub 上,前往 octocat/Spoon-Knife 仓库。

  2. 在文件列表上方,点击 代码

    Screenshot of the list of files on the landing page of a repository. The "Code" button is highlighted with a dark orange outline.

  3. 复制该仓库的 URL。

    • 要使用 HTTPS 克隆仓库,请在“HTTPS”下点击.

    • 要使用 SSH 密钥克隆仓库(包括由您组织的 SSH 证书颁发机构签发的证书),点击 SSH,然后点击.

    • 要使用 GitHub CLI 克隆仓库,点击 GitHub CLI,然后点击.

      Screenshot of the "Code" dropdown menu. To the right of the HTTPS URL for the repository, a copy icon is outlined in dark orange.

  4. 打开 终端终端Git Bash

  5. 切换目录至你已克隆的 Fork 所在位置。

    • 要返回主目录,只需输入 cd,后面不跟其他内容。
    • 要列出当前目录下的文件和文件夹,输入 ls
    • 要进入列出的某个目录,输入 cd YOUR-LISTED-DIRECTORY
    • 要返回上一级目录,输入 cd ..
  6. 输入 git remote -v 并按下 Enter。你将看到当前为 Fork 配置的远程仓库。

    $ git remote -v
    > origin  https://github.com/YOUR-USERNAME/YOUR-FORK.git (fetch)
    > origin  https://github.com/YOUR-USERNAME/YOUR-FORK.git (push)
    
  7. 输入 git remote add upstream,随后粘贴步骤 3 中复制的 URL 并按下 Enter。它的形式如下:

    git remote add upstream https://github.com/ORIGINAL-OWNER/Spoon-Knife.git
    
  8. 要验证刚为 Fork 指定的上游仓库,请再次输入 git remote -v。你应该会看到 origin 对应你的 Fork URL,upstream 对应上游仓库的 URL。

    $ git remote -v
    > origin    https://github.com/YOUR-USERNAME/YOUR-FORK.git (fetch)
    > origin    https://github.com/YOUR-USERNAME/YOUR-FORK.git (push)
    > upstream  https://github.com/ORIGINAL-OWNER/ORIGINAL-REPOSITORY.git (fetch)
    > upstream  https://github.com/ORIGINAL-OWNER/ORIGINAL-REPOSITORY.git (push)
    

现在,你可以使用几个 Git 命令保持 Fork 与上游仓库同步。更多信息,请参阅 同步 Fork

注意

要了解更多关于 GitHub CLI 的信息,请参阅 关于 GitHub CLI

要为 Fork 的仓库配置远程仓库,请使用 --remote 标志。

gh repo fork REPOSITORY --remote=true

要指定远程仓库的名称,请使用 --remote-name 标志。

gh repo fork REPOSITORY --remote-name "main-remote-repo"

编辑 Fork

你可以对 Fork 进行任意更改,包括

  • 创建分支: 分支 让你在不危及主项目的情况下构建新功能或尝试想法。
  • 打开 Pull Request: 如果你想将更改贡献回上游仓库,可通过提交 Pull Request,向原作者请求将你的 Fork 合并到他们的仓库。

查找其他仓库进行 Fork

Fork 一个仓库以开始为项目贡献代码。你可以 Fork 任何公开仓库。

  • 到您的个人账户
  • 到您有权限创建仓库的组织

如果您有私有仓库的访问权限且所有者允许分叉,您可以分叉该仓库

  • 到您的个人账户
  • 到您在 GitHub Team 中有创建仓库权限的组织

使用 GitHub Free 时,无法将私有仓库 Fork 到组织中。有关 GitHub Team 和 GitHub Free 的更多信息,请参阅 GitHub 计划。有关何时可以 Fork 仓库的更多信息,请参阅 关于 Fork 的权限和可见性

你可以浏览 Explore GitHub,寻找项目并开始为开源仓库贡献代码。更多信息,请参阅 在 GitHub 上寻找开源贡献途径

后续步骤

你已经 Fork 了一个仓库,练习了克隆 Fork,并配置了上游仓库。

  • 有关从电脑克隆 Fork 并同步 Fork 中更改的更多信息,请参阅 设置 Git

  • 你还可以创建一个新仓库,将所有项目放入其中并在 GitHub 上共享代码。为你的项目创建仓库可让你在 GitHub 上存储代码,为你的工作提供备份,并可选择与其他开发者共享。更多信息,请参阅 仓库快速入门

  • GitHub 上的每个仓库都归个人或组织所有。你可以通过在 GitHub 上关注并关联这些人、仓库和组织来进行互动。更多信息,请参阅 在 GitHub 上寻找灵感

  • GitHub 拥有活跃的支持社区,你可以在这里寻求帮助并与来自全球的人交流。加入 GitHub Community 的讨论吧。

© . This site is unofficial and not affiliated with GitHub, Inc.