关于 Fork
如果您想参与他人的项目,但没有该仓库的写入权限,则可以使用“Fork 和 Pull Request”工作流程。
Fork 是一个新的仓库,它与原始的“上游”仓库共享代码和可见性设置。Fork 通常用于迭代想法或更改,然后再将其提交回上游仓库,例如在开源项目中,或者当用户无权访问上游仓库的写入权限时。
您可以通过从您的 Fork 向上游仓库提交 Pull Request 来贡献代码。有关更多信息,请参阅“Fork 仓库”。
Fork 仓库
本教程使用 Spoon-Knife 项目,这是一个托管在 GitHub 上的测试仓库,可让您测试 Fork 和 Pull Request 工作流程。
-
前往
Spoon-Knife
项目页面:https://github.com/octocat/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,然后点击.
-
-
打开终端终端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”。
要创建你的分叉的克隆,请使用--clone
标志。
gh repo fork REPOSITORY --clone=true
-
在文件菜单中,点击克隆仓库。
-
点击与你要克隆的仓库位置相对应的选项卡。你也可以点击URL手动输入仓库位置。
-
从仓库列表中,点击你要克隆的仓库。
-
要选择你要克隆仓库的本地目录,在“本地路径”字段旁边,点击选择...并导航到该目录。
-
在“克隆仓库”窗口底部,点击克隆。
创建分支以进行工作
在更改项目之前,你应该创建一个新的分支并检出该分支。通过将更改保存在它们自己的分支中,你可以遵循GitHub工作流程,并确保将来更容易再次为同一个项目做出贡献。更多信息,请参考“GitHub工作流程”。
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”。
创建拉取请求
最后,你准备好将更改提交到主项目了!这是生成其他人项目的fork的最后一步,可以说是最重要的一步。如果你做出了你认为对整个社区都有益的更改,你绝对应该考虑回馈贡献。
为此,请前往GitHub上你的项目所在的仓库。在本例中,它位于https://github.com/<your_username>/Spoon-Knife
。你会看到一个横幅,表明你的分支比octocat:main
领先一个提交。点击贡献,然后点击打开拉取请求。
GitHub将带你到一个页面,该页面显示你的分叉与octocat/Spoon-Knife
仓库之间的差异。点击创建拉取请求。
GitHub将带你到一个页面,你可以在其中输入更改的标题和描述。提供尽可能多的有用信息以及为什么首先要创建此拉取请求的原因非常重要。项目所有者需要能够确定你的更改是否像你认为的那样对每个人都有用。最后,点击创建拉取请求。
管理反馈
拉取请求是讨论的场所。如果项目所有者拒绝你的拉取请求或要求提供更多关于创建它的原因的信息,请不要生气。即使项目所有者选择不合并你的拉取请求,你的更改仍然存在于你的分叉中。其他人可能会发现你的分叉比原始项目更有价值。
查找项目
你已成功分叉并贡献回一个仓库。继续前进,贡献更多!更多信息,请参考“查找在GitHub上为开源项目贡献的方法”。