关于 fork
如果您想为别人的项目贡献代码,但没有该仓库的写入权限,您可以使用“fork 和拉取请求”工作流程。
Fork 是一个新的仓库,它与原始的“上游”仓库共享代码和可见性设置。Fork 通常用于在将想法或更改提议回上游仓库之前对其进行迭代,例如在开源项目中,或者当用户没有上游仓库的写入权限时。
您可以通过从您的 fork 向上游仓库提交拉取请求来贡献代码。有关更多信息,请参阅“Fork 仓库”。
Fork 仓库
本教程使用 Spoon-Knife 项目,这是一个托管在 GitHub.com 上的测试仓库,可让您测试 fork 和拉取请求工作流程。
-
导航到 https://github.com/octocat/Spoon-Knife 上的
Spoon-Knife
项目。 -
在页面右上角,点击 **Fork**。
-
在“Owner”下,选择下拉菜单并点击一个分叉仓库的所有者。
注意
如果您的用户名呈灰色,则表示该分叉仓库已存在。相反,您应该将现有分叉仓库更新到最新版本。有关更多信息,请参见“同步分叉仓库”。
-
默认情况下,分叉仓库的名称与其上游仓库相同。可以选择在“Repository name”字段中输入一个名称,以进一步区分您的分叉仓库。
-
可以选择在“Description”字段中输入分叉仓库的描述。
-
可以选择 **Copy the DEFAULT branch only**。
对于许多分叉场景,例如为开源项目做贡献,您只需要复制默认分支。如果您不选择此选项,所有分支都将被复制到新的分叉仓库中。
-
点击 **Create fork**。
**注意:**如果您想从上游仓库复制其他分支,可以在 **Branches** 页面进行操作。有关更多信息,请参见“在您的仓库中创建和删除分支”。
克隆分叉仓库
您已成功分叉了 Spoon-Knife 仓库,但到目前为止,它只存在于 GitHub 上。要能够处理该项目,您需要将其克隆到您的计算机上。
您可以使用命令行、GitHub CLI 或 GitHub Desktop 克隆您的分叉仓库。
-
在 GitHub 上,导航到您对 Spoon-Knife 仓库的 **分叉仓库**。
-
在文件列表上方,点击 Code.
-
复制仓库的 URL。
-
要使用 HTTPS 克隆仓库,在“HTTPS”下,点击 .
-
要使用 SSH 密钥克隆仓库,包括由您的组织的 SSH 证书颁发机构颁发的证书,点击 **SSH**,然后点击 .
-
要使用 GitHub CLI 克隆仓库,点击 **GitHub CLI**,然后点击 .
-
-
打开 TerminalTerminalGit 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”。
创建拉取请求
最后,你准备好将更改提议到主项目中!这是生成他人项目分支的最后一步,也是最重要的步骤。如果你做出了你认为对整个社区有益的更改,你应该认真考虑回馈。
为此,请前往 GitHub 上你的项目所在的仓库。在本例中,它位于 https://github.com/<your_username>/Spoon-Knife
。你会看到一个横幅,表明你的分支比 octocat:main
超前一个提交。点击 **贡献**,然后点击 **打开拉取请求**。
GitHub 会将你带到一个页面,该页面显示你的分支和 octocat/Spoon-Knife
仓库之间的差异。点击 **创建拉取请求**。
GitHub 会将你带到一个页面,你可以在其中输入更改的标题和描述。重要的是要提供尽可能多的有用信息以及你为什么要创建此拉取请求的理由。项目所有者需要能够确定你的更改是否像你认为的那样对每个人都有用。最后,点击 **创建拉取请求**。
管理反馈
拉取请求是一个讨论区域。如果项目所有者拒绝你的拉取请求,或者要求你提供更多关于创建拉取请求的原因的信息,不要感到冒犯。即使项目所有者选择不合并你的拉取请求,你的更改仍然存在于你的分支中。可能是其他人会发现你的分支比原始项目更有价值。
查找项目
你已成功地分叉并回馈到一个仓库。继续前进,贡献更多!有关更多信息,请参阅“在 GitHub 上寻找为开源项目做出贡献的方法”。