如果你想为别人的项目做出贡献,但没有存储库的写权限,你可以使用“分支和拉取请求”工作流。
分支是一个新存储库,它与原始“上游”存储库共享代码和可见性设置。分支通常用于在将想法或更改建议回上游存储库之前进行迭代,例如在开源项目中或当用户没有上游存储库的写权限时。
你可以通过从你的分支向上传递拉取请求来做出贡献。有关更多信息,请参阅“分支存储库”。
本教程使用 Spoon-Knife 项目,这是一个托管在 GitHub.com 上的测试存储库,它允许你测试分支和拉取请求工作流。
-
导航到 https://github.com/octocat/Spoon-Knife 上的Spoon-Knife
项目。
-
在页面的右上角,单击分支。
-
在“所有者”下,选择下拉菜单并为分支存储库单击一个所有者。
注意
如果你的用户名显示为灰色,这是因为分支已经存在。相反,你应该更新你现有的分支。有关更多信息,请参阅“同步分支”。
-
默认情况下,分支的名称与其上游存储库的名称相同。或者,为了进一步区分你的分支,在“存储库名称”字段中,键入一个名称。
-
在“描述”字段中,可以选择输入分叉的描述。
-
可以选择仅复制默认分支。
对于许多分叉场景(例如为开源项目做贡献),你只需要复制默认分支。如果不选择此选项,所有分支都将复制到新分叉中。
-
单击创建分叉。
你已成功分叉 Spoon-Knife 存储库,但到目前为止,它只存在于 GitHub 上。要能够处理该项目,你需要将其克隆到你的计算机上。
你可以使用命令行、GitHub CLI 或 GitHub Desktop 克隆你的分叉。
在对项目进行更改之前,你应创建一个新分支并签出。通过将更改保留在其自己的分支中,你可以遵循 GitHub 流程并确保将来更容易再次为同一项目做出贡献。有关详细信息,请参阅“GitHub 流程”。
继续使用你最喜欢的文本编辑器(如 Visual Studio Code)对项目进行一些更改。例如,你可以更改 index.html
中的文本以添加你的 GitHub 用户名。
当你准备提交更改时,暂存并提交更改。git add .
告诉 Git 你希望在下次提交中包含你的所有更改。git commit
对这些更改进行快照。
当你暂存并提交文件时,你实际上是在告诉 Git,“好的,对我的更改进行快照!”你可以继续进行更多更改,并进行更多提交快照。
现在,你的更改只存在于本地。当你准备将更改推送到 GitHub 时,请将更改推送到远程。
最后,你准备向主项目提出更改了!这是为他人项目制作分支的最后一步,也是最重要的一步。如果你做出了你认为对整个社区有益的更改,你绝对应该考虑回馈。
为此,请前往 GitHub 上存放你项目的存储库。对于此示例,它将位于 https://github.com/<your_username>/Spoon-Knife
。你将看到一个横幅,表明你的分支比 octocat:main
领先一次提交。单击“贡献”,然后单击“打开拉取请求”。
GitHub 会将你带到一个页面,显示你的分支与 octocat/Spoon-Knife
存储库之间的差异。单击“创建拉取请求”。
GitHub 会将你带到一个页面,你可以在其中输入标题和更改说明。首先,提供尽可能多的有用信息和理由来解释你为何要进行此拉取请求非常重要。项目所有者需要能够确定你的更改是否像你认为的那样对每个人都有用。最后,单击“创建拉取请求”。
拉取请求是讨论的区域。如果项目所有者拒绝你的拉取请求或要求提供更多有关为何进行此请求的信息,请不要感到冒犯。即使项目所有者选择不合并你的拉取请求,你的更改仍会存在于你的分支中。其他人可能会发现你的分支比原始项目更有价值。
你已成功分叉并向存储库进行了贡献。继续前进,做出更多贡献!有关更多信息,请参阅“在 GitHub 上查找为开源做出贡献的方法”。