如何在 GitHub 上创建拉取请求

介绍

Git 是一个开源的分布式版本控制系统,使协作软件项目更易于管理. 许多项目将文件保存在 Git 存储库中,像 GitHub 这样的平台使共享和贡献代码变得易于访问、有价值和有效。

在公共存储库中托管的开源项目受益于更广泛的开发者社区通过 推送请求 的贡献,这些请求要求项目接受您对其代码存储库所做的更改。

本教程将引导您通过命令行向Git存储进行引导请求,以便您能够为开源软件项目做出贡献。

前提条件

您可以检查 Git 是否安装在您的计算机上,并通过遵循 此指南来完成操作系统的安装过程。

您还需要拥有或创建一个GitHub帐户,您可以通过GitHub网站, github.com,并可以登录或创建您的帐户。

从2020年11月开始,GitHub删除了基于密码的身份验证,因此,您需要创建一个个人访问代码(https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token)或添加您的SSH公共密钥信息(https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account)才能通过命令行访问GitHub存储库。

您可以通过阅读 本介绍来更熟悉开源项目。

创建存储库的副本

一个 repository ,或简称 ** repo** ,基本上是项目的主要文件夹. 该库包含所有相关的项目文件,包括文档,并存储每个文件的修订历史记录。

要在开源项目上工作,您首先需要创建自己的存储库副本. 要做到这一点,您应该将存储库折叠,然后克隆,以便您有本地工作副本。

Fork 存储库

您可以通过浏览器导航到您想要贡献的开源项目的 GitHub URL 来对 GitHub 进行存储。

例如,DigitalOcean Community(用户名: do-community)是cloud_haiku项目库的所有者,因此该项目的GitHub URL是:

1https://github.com/do-community/cloud_haiku

在上面的示例中,do-community是用户名,而cloud_haiku是存储库名。

一旦您确定了您想要贡献的项目,您可以导航到URL,该URL将格式化如下:

1https://github.com/username/repository

或者,您可以使用GitHub搜索栏搜索该项目。

当您在存储库的主要页面上时,一个 Fork 按钮将显示在页面的右上方,在您的用户图标下方:

GitHub Forking

在您的浏览器窗口中,您将收到通知,您正在处理的存储库:

Forking on GitHub

一旦这个过程完成,您的浏览器将进入一个类似于上一个存储屏幕的屏幕,但在顶部,您将看到您的用户名在存储名之前,并在URL中还会说您的用户名在存储名之前。

因此,在上面的示例中,而不是页面顶部的 do-community / cloud_haiku ,你会看到 ** your-username / cloud_haiku** ,新 URL 读取类似于此:

1https://github.com/your-username/cloud_haiku

随着存储库被折叠,您已经准备好克隆它,以便您拥有代码库的本地工作副本。

克隆存储库

要创建您想要贡献的存储库的本地副本,请先打开终端窗口。

我们将使用git 克隆命令以及指向您的存储库的 URL。

此 URL 将与上面的 URL 相似,但现在它将以 .git 结束. 在上面的 cloud_haiku 示例中,URL 将读取类似的内容,您的实际用户名将取代 您的用户名:

1https://github.com/your-username/cloud_haiku.git

您可以使用绿色 ** 代码 ** 按钮来复制该 URL 到您从原始存储页面中加密的存储库页面,一旦您点击该按钮,您将能够通过点击 URL 旁边的剪板按钮复制该 URL:

GitHub Clone or Download

一旦我们有URL,我们就准备好克隆存储库。为了做到这一点,我们将git clone命令与命令行中的存储库URL结合到终端窗口中:

1git clone https://github.com/your-username/repository.git

现在我们有本地代码的副本,我们可以继续创建一个新的分支,以便与代码一起工作。

创建一个新的分支

每当您在协作项目上工作时,您和其他贡献库的程序员都会同时有不同的新功能或修复的想法. 这些新功能中的一些不需要大量的时间来实现,但其中一些将持续运行。

项目存储库的主要分支部通常被称为 main 分支部。

注:2020年6月,GitHub更新了其术语,将默认源代码分支称为分支,而不是分支。

创建基于现有项目的分支时,你应该确保你的分支名称是描述性的,而不是称它为我的分支,你应该选择一些像前端链接迁移修复文档类型

要从我们的终端窗口创建分支,让我们更改我们的目录,以便我们在存储库的目录中工作. 请确保使用存储库的实际名称(如‘cloud_haiku’)转换为该目录。

1cd repository

现在,我们将使用git branch命令创建我们的新分支,请确保您以描述性命名它,以便其他在项目上工作的人了解您正在工作的内容。

1git branch new-branch

现在,我们的新分支已经创建,我们可以通过使用git checkout命令切换,以确保我们在该分支上工作:

1git checkout new-branch

一旦您输入git checkout命令,您将收到以下输出:

1[secondary_label Output]
2Switched to branch 'new-branch'

或者,您可以将上述两个命令压缩,创建并切换到新的分支,使用以下命令和-b旗:

1git checkout -b new-branch

如果您想返回主要,您将使用主分支的名称的检查命令:

1git checkout main

检查命令将允许您在多个分支之间切换,因此您可以同时工作在多个功能上。

此时,您现在可以修改现有文件或在自己的分支中添加新文件到项目中。

在本地做出改变

要演示做一个拉动请求,让我们使用例子 cloud_haiku repo 并在我们的本地副本中创建一个新文件. 使用您喜爱的文本编辑器创建一个新文件,以便我们可以根据 贡献指南所解释添加一个新的 haiku 诗。

1nano filename.md

接下来,我们将添加一些文本到新文件中,遵循 贡献指南。我们需要使用Jekyll格式,并添加带行断的海库。

 1[label filename.md]
 2---
 3layout: haiku
 4title: Octopus Cloud
 5author: Sammy
 6---
 7
 8Distributed cloud <br>
 9Like the octopuses' minds <br>
10Across the network <br>

添加文本后,保存并关闭文件. 如果您使用了 nano,请按CTRL + X,然后按Y,然后按ENTER

一旦您修改了现有文件或添加了一个新的文件到您选择的项目,您可以将其升级到您的本地存储库,我们可以使用git add命令。

1git add filename.md

我们将我们创建的文件的名称转移到这个命令,以便将其放到我们的本地存储库中,以确保您的文件已准备好添加。

如果您想要在特定目录中添加您已修改的所有文件,则可以使用以下命令将它们全部放进舞台:

1git add .

在这里,完整的停机或期限将添加所有相关的文件。

如果您想要重复添加所有更改,包括子目录中的更改,则可以键入:

1git add -A

或者,您可以输入git add -all为所有新文件进行阶段化。

随着我们的文件步骤,我们将希望用git commit命令记录我们对库所做的更改。

承诺改变

承诺信息是您的代码贡献的一个重要方面;它有助于维护者和其他贡献者充分了解您所做的更改,为什么您所做的更改,以及它有多重要。

如果我们有一个非常短的信息,我们可以记录它与m旗和引文中的信息. 在我们添加一个haiku的例子中,我们的git commit可能类似于以下。

1git commit -m "Added a new haiku in filename.md file"

除非是微小的或预期变更,否则我们可能需要添加更长的 commit 消息,以便我们的协作者能够充分地加速我们的贡献. 为了记录这个更大的消息,我们将运行git commit命令,打开默认文本编辑器:

1git commit

运行此命令时,您可能会注意到您正在 vim 编辑器中,您可以通过键入 :q 来退出该编辑器。 如果您想配置默认文本编辑器,您可以使用 git config 命令这样做,并设置 nano 作为默认编辑器,例如:

1git config --global core.editor "nano"

或来:

1git config --global core.editor "vim"

在运行git commit命令后,根据您正在使用的默认文本编辑器,您的终端窗口应该显示一个为您编辑准备的文档,该文档将类似于此:

 1[label GNU nano 2.0.6 File: …username/repository/.git/COMMIT_EDITMSG]
 2
 3# Please enter the commit message for your changes. Lines starting
 4# with '#' will be ignored, and an empty message aborts the commit.
 5# On branch new-branch
 6# Your branch is up-to-date with 'origin/new-branch'.
 7#
 8# Changes to be committed:
 9#       modified:   new-feature.py
10#

在介绍性评论下面,您应该将 commit 消息添加到文本文件中。

要写一个有用的承诺信息,请在第一行包含一个约50个字符长的概要. 在此下面,并分解为可消化的章节,你应该包括一个描述,说明你做这个修改的原因,代码是如何工作的,以及一些额外信息,这些信息可以将它背景化,并澄清,让其他人在合并时审查工作. 尽量发挥帮助和主动性,确保项目保持者能够充分了解你的贡献.

推動變化

一旦您已保存并退出 commit 消息文本文件,您可以通过以下命令验证 Git 将执行什么:

1git status

根据您所做的更改,您将收到类似于以下的输出:

1[secondary_label Output]
2On branch new-branch
3nothing to commit, working tree clean

在此时,您可以使用git push命令将更改推到您的存库的当前分支:

1git push --set-upstream origin new-branch

该命令将为您提供输出,以便您知道进展情况,它将类似于以下情况:

1[secondary_label Output]
2Counting objects: 3, done.
3Delta compression using up to 4 threads.
4Compressing objects: 100% (2/2), done.
5Writing objects: 100% (3/3), 336 bytes | 0 bytes/s, done.
6Total 3 (delta 0), reused 0 (delta 0)
7To https://github.com/your-username/repository.git
8   a1f29a6..79c0e80 new-branch  -> new-branch
9Branch new-branch set up to track remote branch new-branch from origin.

您现在可以导航到您的 GitHub 网页上的折叠存储库,并切换到您推出的分支,以查看您在浏览器中所做的更改。

在此时,您可以向原始存储库(https://andsky.com/tech/tutorials/how-to-create-a-pull-request-on-github# create-pull-request)进行引导请求,但如果您尚未这样做,则需要确保本地存储库与上游存储库保持最新状态。

更新本地存储库

当您与其他贡献者一起在一个项目上工作时,重要的是要将本地存储库与该项目保持最新,因为您不希望对代码进行提取请求,这会自动导致冲突(尽管在协作代码项目中,冲突可能发生)。

首先,我们将进行对叉子的远程配置,然后同步叉子。

为 Fork 配置远程

** 远程存储库使您能够在 Git 项目上与其他人合作. 每个远程存储库都是在互联网上或您可以访问的网络上托管的项目版本。

为了能够与您正在使用的原始存储库同步在叉子中所做的更改,您需要配置一个向上流存储库引用的远程存储库。

git remote命令会列出您已经指定的任何远程存储库,所以如果您像上面一样克隆了您的存储库,您至少会收到有关源存储库的输出,这是Git给克隆目录的默认名称。

从我们的终端窗口中的存储库目录中,让我们使用git remote命令和-v旗帜来显示 Git 存储的 URL 以及相关的远程简称(如起源中):

1git remote -v

由于我们克隆了一个存储库,我们的输出应该是这样的:

1[secondary_label Output]
2origin https://github.com/your-username/forked-repository.git (fetch)
3origin https://github.com/your-username/forked-repository.git (push)

如果您之前已经设置了多个远程设备,则git remote -v命令将提供所有设备的列表。

接下来,我们将指定一个新的远程上游存储库,以便我们与叉子同步。

1git remote add upstream https://github.com/original-owner-username/original-repository.git

对于我们的cloud_haiku示例,这个命令将如下:

1git remote add upstream https://github.com/do-community/cloud_haiku.git

在本例中,上游是我们为远程存储库提供的简称,因为在Git中,上游是指我们克隆的存储库。

我们可以通过从库目录中再次使用git remote -v命令来验证我们向上游库的远程指针是否正确添加:

1git remote -v
1[secondary_label Output]
2origin https://github.com/your-username/forked-repository.git (fetch)
3origin https://github.com/your-username/forked-repository.git (push)
4upstream https://github.com/original-owner-username/original-repository.git (fetch)
5upstream https://github.com/original-owner-username/original-repository.git (push)

现在你可以参考命令行上的上游,而不是写整个URL,你已经准备好同步你的叉子与原始存储库。

同步叉子

一旦我们配置了一个远程存储器,该存储器参考了GitHub上的上游和原始存储器,我们已经准备好同步我们的存储器叉子,以保持其最新。

为了同步我们的叉子,从我们本地存储库的目录在终端窗口中,我们将使用git getch命令从上游存储库中提取分支及其相应的委托,因为我们使用了简称上游来指向上游存储库,我们将把它传递给命令。

1git fetch upstream

取决于自我们将存储库变更以来所做的多少更改,您的输出可能会有所不同,可能包括数列、压缩和卸载对象的几行。

1[secondary_label Output]
2From https://github.com/original-owner-username/original-repository
3 * [new branch]      main     -> upstream/main

现在,主要分支机构的承诺将存储在一个名为上游/主的本地分支机构中。

让我们切换到我们的存储库的本地主要分支机构:

1git checkout main
1[secondary_label Output]
2Switched to branch 'main'

现在我们将将原始存储中的主要分支机构所做的任何更改合并,我们将通过本地的上游/主分支机构访问该分支机构,并与本地的主要分支机构合并:

1git merge upstream/main

此处的输出将有所不同,但如果有更改,则将从更新开始,或者从已更新开始,如果自您打开存储库以来没有更改。

您的叉子的主分支现在与上游存储器同步,您所做的任何本地更改都没有丢失。

根据您自己的工作流程和您花费的时间进行更改,您可以同步您的叉子与原始存储的上游代码,只要有意义,但您肯定应该同步您的叉子在提交拉动请求之前,以确保您不会自动贡献矛盾的代码。

创建推送请求

此时,您已准备好向原始存储库提交拉动请求。

您应该导航到您的折叠存储库,并在页面左侧按下 新拉取请求 按钮。

GitHub Pull Request Button

在下一个屏幕上,您可以更改分支,在下一个屏幕上,您可以从下滑菜单中选择相应的存储库和相应的分支。

例如,一旦您在左侧选择了原始存储库的主要分支,并在右侧选择了您的折叠存储库的新分支,您应该收到显示您的分支可以合并,如果没有竞争代码的屏幕:

GitHub Pull Request

您应该在相应的字段中添加标题和评论,然后按一下 ** 创建拉动请求 ** 按钮。

在此时,原始存储库的维护者将决定是否接受您的提取请求,他们可能会要求您通过提交代码审查来编辑或修改您的代码,然后再接受提取请求。

结论

在此时,您已成功向开源软件库发送了提取请求,在此之后,您应该确保在等待审查时更新和改编代码,因此项目维护人员可能会要求您重新编辑代码,因此您应该做好准备。

贡献开源项目 - 并成为一个活跃的开源开发人员 - 可以是一个有益的经验. 定期对您经常使用的软件做出贡献可以让你确保该软件对其他最终用户具有尽可能多的价值。

如果您有兴趣了解更多关于 Git 和协作的开源软件,您可以阅读我们的教程系列题为 An Introduction to Open Source. 如果您已经熟悉 Git,并想要一个骗局表,您可以参考[如何使用 Git:一个参考指南](https://andsky.com/tech/tutorials/how-to-use-git-a-reference-guide)

Published At
Categories with 技术
comments powered by Disqus