关于 Fork
如果你想为别人的项目做出贡献,但没有该仓库的写入权限,你可以使用“Fork 和 Pull Request”工作流。
Fork 是一个新的仓库,它与原始的“上游”仓库共享代码和可见性设置。Fork 通常用于在将想法或更改提议回上游仓库之前进行迭代,例如在开源项目中或用户没有上游仓库的写入权限时。
你可以通过从你的 Fork 提交 Pull Request 到上游仓库来做出贡献。有关更多信息,请参阅“Fork 仓库”。
Fork 仓库
本教程使用 Spoon-Knife 项目,这是一个托管在 GitHub 上的测试仓库,可让你测试 Fork 和 Pull Request 工作流。
-
导航到 https://github.com/octocat/Spoon-Knife 上的
Spoon-Knife
项目。 -
在页面右上角,点击“Fork”。
-
在“所有者”下,选择下拉菜单并点击 Fork 仓库的所有者。
注意
如果你的用户名呈灰色,则表示 Fork 已经存在。相反,你应该将现有的 Fork 更新到最新状态。有关更多信息,请参阅“同步 Fork”。
-
默认情况下,Fork 的名称与其上游仓库相同。或者,为了进一步区分你的 Fork,可以在“仓库名称”字段中输入名称。
-
或者,在“描述”字段中,输入 Fork 的描述。
-
或者,选择“仅复制 DEFAULT 分支”。
对于许多 Fork 场景,例如为开源项目做出贡献,你只需要复制默认分支。如果你不选择此选项,所有分支都将复制到新的 Fork 中。
-
点击“创建 Fork”。
注意
如果你想从上游仓库复制其他分支,可以在“分支”页面中执行此操作。有关更多信息,请参阅“在仓库中创建和删除分支”。
克隆 Fork
你已成功 Fork 了 Spoon-Knife 仓库,但到目前为止,它仅存在于 GitHub 上。要能够处理该项目,你需要将其克隆到你的计算机上。
你可以使用命令行、GitHub CLI 或 GitHub Desktop 克隆你的 Fork。
-
在 GitHub 上,导航到 你的 Spoon-Knife 仓库的 Fork。
-
在文件列表上方,点击 代码.
-
复制仓库的 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. > remove: 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”手动输入仓库位置。
-
从仓库列表中,点击要克隆的仓库。
-
要选择要克隆仓库的本地目录,请在“本地路径”字段旁边,点击“选择...”并导航到该目录。
-
在“克隆仓库”窗口底部,点击“克隆”。
创建分支以进行工作
在对项目进行更改之前,你应该创建一个新分支并检出该分支。通过将更改保存在它们自己的分支中,你可以遵循 GitHub Flow 并确保将来更容易再次为同一项目做出贡献。有关更多信息,请参阅“GitHub Flow”。
git branch BRANCH-NAME
git checkout BRANCH-NAME
git branch BRANCH-NAME
git checkout BRANCH-NAME
有关如何在 GitHub Desktop 中创建和管理分支的更多信息,请参阅“在 GitHub Desktop 中管理分支”。
进行和推送更改
继续使用你喜欢的文本编辑器(如 Visual Studio Code)对项目进行一些更改。例如,你可以更改 index.html
中的文本以添加你的 GitHub 用户名。
准备好提交更改后,暂存并提交更改。git add .
告诉 Git 你希望在下次提交中包含所有更改。git commit
对这些更改进行快照。
git add .
git commit -m "a short description of the change"
git add .
git commit -m "a short description of the change"
有关如何在 GitHub Desktop 中暂存和提交更改的更多信息,请参阅“在 GitHub Desktop 中提交和审查项目更改”。
当你暂存和提交文件时,你实际上是在告诉 Git:“好的,对我的更改进行快照!”你可以继续进行更多更改,并进行更多提交快照。
现在,你的更改仅存在于本地。准备好将更改推送到 GitHub 后,将更改推送到远程。
git push
git push
有关如何在 GitHub Desktop 中推送更改的更多信息,请参阅“从 GitHub Desktop 推送更改到 GitHub”。
创建 Pull Request
最后,你已准备好将更改提议到主项目中!这是生成他人项目的 Fork 的最后一步,并且可以说是最重要的一步。如果你做出了你认为对整个社区有益的更改,你绝对应该考虑回馈。
为此,请转到 GitHub 上托管项目的仓库。在本例中,它将位于 https://github.com/<your_username>/Spoon-Knife
。你将看到一个横幅,指示你的分支比 octocat:main
超前一个提交。点击“贡献”,然后点击“打开 Pull Request”。
GitHub 将带你到一个页面,该页面显示你的 Fork 和 octocat/Spoon-Knife
仓库之间的差异。点击“创建 Pull Request”。
GitHub 将带你到一个页面,你可以在其中输入更改的标题和描述。提供尽可能多的有用信息以及最初创建此 Pull Request 的理由非常重要。项目所有者需要能够确定你的更改是否像你认为的那样对所有人都有用。最后,点击“创建 Pull Request”。
管理反馈
Pull Request 是讨论的场所。如果项目所有者拒绝你的 Pull Request 或要求提供更多关于创建它的原因的信息,请不要感到冒犯。即使项目所有者选择不合并你的 Pull Request,你的更改仍然存在于你的 Fork 中。可能是其他人会发现你的 Fork 比原始项目更有价值。
查找项目
你已成功 Fork 并回馈了一个仓库。继续前进,做出更多贡献!有关更多信息,请参阅“在 GitHub 上查找为开源做出贡献的方法”。