关于 fork
Fork 是一个新的仓库,它与原始的“上游”仓库共享代码和可见性设置。Fork 通常用于在将想法或更改建议回上游仓库之前进行迭代,例如在开源项目中,或者当用户无权访问上游仓库时。有关更多信息,请参阅“使用 fork”。
为其他人的项目提出更改
例如,您可以使用 fork 来提出与修复错误相关的更改。与其记录您发现的错误的问题,您可以
- Fork 仓库。
- 进行修复。
- 向项目所有者提交拉取请求。
将其他人的项目作为自己想法的起点
开源软件基于这样的理念:通过共享代码,我们可以创建更好、更可靠的软件。有关更多信息,请参阅开源计划网站上的“关于开源计划”。
有关将开源原则应用于 GitHub 上组织的开发工作的更多信息,请参阅 GitHub 的白皮书“内部源代码简介”。
从他人的项目的 fork 创建公共仓库时,请务必包含一个许可证文件,该文件确定您希望如何与他人共享您的项目。有关更多信息,请参阅 choosealicense.com 上的“选择开源许可证”。
有关开源的更多信息,特别是如何创建和发展开源项目,我们创建了 开源指南,通过推荐创建和维护开源项目仓库的最佳实践,帮助您培养健康的开源社区。您还可以参加一个关于维护开源社区的免费 GitHub 技能 课程。
先决条件
如果您尚未设置,请先从 Git 设置 Git 和 GitHub.com 的身份验证。有关更多信息,请参阅“设置 Git”。
Fork 仓库
你可能需要 fork 一个项目来向主仓库(upstream repository)提议更改。在这种情况下,定期将你的 fork 与主仓库同步是一个好习惯。为此,你需要使用命令行上的 Git。你可以使用你刚刚 fork 的同一个 octocat/Spoon-Knife 仓库来练习设置主仓库。
-
在 GitHub 上,导航到 octocat/Spoon-Knife 仓库。
-
在页面右上角,点击**Fork**。
-
在“所有者”下,选择下拉菜单并点击一个 fork 仓库的所有者。
-
默认情况下,fork 的名称与它们的主仓库相同。或者,为了更好地区分你的 fork,在“仓库名称”字段中输入一个名称。
-
或者,在“描述”字段中,输入你的 fork 的描述。
-
或者,选择**仅复制默认分支**。
对于许多 fork 场景,例如贡献开源项目,你只需要复制默认分支。如果你不选择此选项,所有分支都将复制到新的 fork 中。
-
点击**创建 fork**。
注意
如果你想从主仓库复制其他分支,可以从**分支**页面进行操作。更多信息,请参见“在你的仓库中创建和删除分支”。
要了解有关 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 中,如果你尝试克隆你没有写入权限的仓库,则会自动为你创建一个 fork。
-
在**文件**菜单中,点击**克隆仓库**。
-
点击与要克隆的仓库位置相对应的选项卡。你也可以点击**URL**手动输入仓库位置。
-
从仓库列表中,点击要克隆的仓库。
-
要选择要克隆仓库的本地目录,请在“本地路径”字段旁边点击**选择…**并导航到该目录。
-
在“克隆仓库”窗口底部,点击**克隆**。
-
阅读“你打算如何使用这个 fork?”窗口中的信息。
- 如果你计划将此 fork 用于贡献到原始主仓库,请点击**贡献到父项目**。
- 如果你计划将此 fork 用于与主仓库无关的项目,请点击**为我自己的目的**。
-
点击**继续**。
克隆你的 fork 仓库
现在,你已经 fork 了 Spoon-Knife 仓库,但是你的计算机上本地没有该仓库的文件。
-
在 GitHub 上,导航到**你的 fork** 的 Spoon-Knife 仓库。
-
在文件列表上方,点击 代码.
-
复制仓库的 URL。
-
要使用 HTTPS 克隆仓库,在“HTTPS”下,点击.
-
要使用 SSH 密钥克隆仓库(包括组织的 SSH 证书颁发机构颁发的证书),请点击**SSH**,然后点击.
-
要使用 GitHub CLI 克隆仓库,请点击**GitHub CLI**,然后点击.
-
-
打开终端终端Git Bash。
-
将当前工作目录更改为你想要克隆目录的位置。
-
键入
git clone
,然后粘贴你之前复制的 URL。它看起来像这样,用你的 GitHub 用户名代替YOUR-USERNAME
git clone https://github.com/YOUR-USERNAME/Spoon-Knife
-
按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.
要了解有关 GitHub CLI 的更多信息,请参见“关于 GitHub CLI”。
要创建你的 fork 的克隆,请使用--clone
标志。
gh repo fork REPOSITORY --clone=true
-
在**文件**菜单中,点击**克隆仓库**。
-
点击与要克隆的仓库位置相对应的选项卡。你也可以点击**URL**手动输入仓库位置。
-
从仓库列表中,点击要克隆的仓库。
-
要选择要克隆仓库的本地目录,请在“本地路径”字段旁边点击**选择…**并导航到该目录。
-
在“克隆仓库”窗口底部,点击**克隆**。
配置 Git 以将你的 fork 与主仓库同步
当你 fork 一个项目以向主仓库提议更改时,你可以配置 Git 将更改从主仓库拉取到你的 fork 的本地克隆。
-
在 GitHub 上,导航到 octocat/Spoon-Knife 仓库。
-
在文件列表上方,点击 代码.
-
复制仓库的 URL。
-
要使用 HTTPS 克隆仓库,在“HTTPS”下,点击.
-
要使用 SSH 密钥克隆仓库(包括组织的 SSH 证书颁发机构颁发的证书),请点击**SSH**,然后点击.
-
要使用 GitHub CLI 克隆仓库,请点击**GitHub CLI**,然后点击.
-
-
打开终端终端Git Bash。
-
将目录更改为你克隆的 fork 的位置。
- 要转到你的主目录,只需键入
cd
,无需其他文本。 - 要列出当前目录中的文件和文件夹,请键入
ls
。 - 要进入列出的目录之一,请键入
cd YOUR-LISTED-DIRECTORY
。 - 要向上移动一个目录,请键入
cd ..
。
- 要转到你的主目录,只需键入
-
键入
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)
-
键入
git remote add upstream
,然后粘贴你在步骤 3 中复制的 URL 并按Enter键。它看起来像这样git remote add upstream https://github.com/ORIGINAL-OWNER/Spoon-Knife.git
-
要验证你为你的 fork 指定的新主仓库,请再次键入
git remote -v
。你应该看到你的 fork 的 URL 为origin
,主仓库的 URL 为upstream
。$ 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 进行任何更改,包括
查找另一个要 fork 的仓库
fork 一个仓库以开始贡献项目。你可以将任何公共仓库 fork 到你的个人帐户,或 fork 到你有权创建仓库的组织。如果你有权访问私有仓库并且所有者允许 fork,则可以将仓库 fork 到你的个人帐户,或 fork 到你在 GitHub Team 中有权创建仓库的组织。你不能使用 GitHub Free 将私有仓库 fork 到组织。有关 GitHub Team 和 GitHub Free 的更多信息,请参见“GitHub 的计划”。有关何时可以 fork 仓库的更多信息,请参见“关于 fork 的权限和可见性”。
你可以浏览探索 GitHub以查找项目并开始贡献开源仓库。更多信息,请参见“在 GitHub 上查找贡献开源的方法”。
后续步骤
你现在已经 fork 了一个仓库,练习了克隆你的 fork,并配置了一个主仓库。
-
有关从你的计算机克隆 fork 和同步 fork 仓库中更改的更多信息,请参见“设置 Git”。
-
你还可以创建一个新的仓库,你可以在其中放置所有项目并在 GitHub 上共享代码。为你的项目创建仓库允许你将代码存储在 GitHub 中。这为你提供了你可以选择与其他开发人员共享的工作备份。更多信息,请参见“仓库快速入门”。
-
GitHub 上的每个仓库都由个人或组织拥有。你可以通过在 GitHub 上连接和关注他们来与个人、仓库和组织进行互动。更多信息,请参见“在 GitHub 上寻找灵感”。
-
GitHub 有一个很棒的支持社区,你可以在那里寻求帮助并与来自世界各地的人们交谈。加入 GitHub 社区的对话。