如何使用Git和GitHub进行协作编程?

2018年十月

这是我在此处发布的有关Git和GitHub的基础教程的续篇。 如果您不熟悉Git或GitHub,建议您从那里开始阅读。

目录:

  • 组织机构
  • 前叉
  • 拉取请求
  • 代码审查流程
  • 部署方式
  • 标签
  • 发布
  • 高级功能

在上一篇文章中,我已经向您提供了Git和GitHub的基本概念。 在这篇文章中,我们将了解如何提高对VCS(版本控制系统)的了解,并使我们的开发过程更加结构化,以便与社区或同事合作,以实现更好的协作编程。

好的,我说的是“ 社区 ”或“ 同事 ”。 如果他们也想做出贡献,他们如何查看和使用自己的云存储库? 我们需要一个通用的存储库来放置我们的项目,以便每个想要在项目上工作的其他人都可以访问它。

我们该怎么做? 开始了。

组织机构

该组织就像在GitHub中创建一个组一样,就像在其他社交媒体或消息传递平台(如Facebook,WhatsApp,Skype等)中的组一样。

比在一个地方的一群程序员还真棒! 💙

图片由rawpixel在Unsplash上​​拍摄

让我们开始创建一个组织。

转到GitHub的主页,或单击此处查看以下屏幕。

GitHub.com的主页

如果您不是黑客,则必须先登录才能看到上面的屏幕。 😬

在右上角,您具有+图标,单击它会打开此下拉窗口。

GitHub中的新组织选项

您已经有了主意,不是吗? 如果还没有,则必须单击“ 创建新组织 ”以创建一个新组织。 😑

填写一些基本详细信息,例如组织名称,电子邮件ID等。到目前为止,由于我们将不创建任何私人项目,因此您可以在免费计划中创建它。 当您要为公司或某个团队创建组织以使其项目不公开时,必须在此步骤中设置付款设置。

到目前为止,我们不需要添加其他成员,您可以在以后的任何时间进行添加。 只需填写其他强制性详细信息并完成新组织的创建。

干杯! 现在您有了自己的组织。 😎

组织可以保存项目(AKA存储库)和GitHub的现有成员作为其一部分。 因此,我们必须在组织中创建一个项目,以使其他人作为团队与我们一起工作。

等什么? 让我们创建一个。

在您的组织的主页中,您可以看到一个名为“ New ”的按钮。 单击它会打开一个窗口,您可以在其中填写一些详细信息并创建存储库,就像使用我们自己的帐户创建存储库一样。 唯一的区别是,存储库归组织所有,而不是您所有,即使它是由您自己创建的。 这是什么意思? 这意味着只有拥有您组织的管理员访问权限的人才能使用这些存储库执行任何操作,而其他成员则不能。

不用担心 目前,您是组织的唯一管理员。

您不能将代码推送到刚在自己的组织上创建的存储库。

是的,你没有看错。 如果您确实想与您的团队,朋友或同级程序员合作,那就应该这样做。

如前所述,该回购由组织所有。 这意味着每个从事项目工作的成员都必须知道发生了什么。 您不应更改代码中的某些内容并直接推送它。 您需要提出更改建议并作为提案提交。 这样其他成员就可以审核代码,并且在每个人都批准后我们可以推送代码。 当组织像许多开源组织一样成长时,只有经授权的管理员才能批准所做的更改,以免破坏应用程序。

好吧,他们怎么做? 那就是分叉发挥作用的地方。

前叉

叉子不过是存储库的副本。

让我们叉!

在组织项目的主页上,您可以在右上角看到一个名为“ Fork ”的按钮,如下所示。

GitHub信息库中的Fork按钮

当您分叉刚在组织中创建的存储库时,它将询问您要使用哪个帐户创建此分叉。 单击您的帐户,您会在其中看到您的用户名和个人资料图片。 现在,您已经在帐户下获得了组织的回购副本。 这称为组织回购的分支。

您知道吗,您是此复制的fork存储库的所有者。 (即使它继承了组织回购协议的某些属性,如安全性配置等)

fork和您自己的存储库有什么区别?

分支始终链接到其他组织和作为父组织的其他组织的原始存储库。 因此,如果您想对它们的存储库提出代码更改建议,则可以很容易地从fork中给出,因为它显然知道它的父级。

您不能从您在帐户上创建的其他存储库中提议对任何其他存储库进行代码更改。 就是那样行不通。

您可以创建任意数量的分支并通过将其提交推送到该项目中进行任何更改。

但是,我们如何建议对组织的回购进行这些更改? 进一步查找答案。

拉取请求

拉取请求(AKA PR)是一种将代码更改建议给父存储库或什至是同一存储库中另一个分支的方法。

每当您使用某个功能或修复错误,甚至进行一些随机代码更改时,通常您都会提交代码并将其推送到个人存储库中的云中。 在组织的存储库中,您不能简单地按原样推送更改。 您必须提出变更建议,组织的其他成员也必须审查提议的变更并将其与组织的回购合并。

因此,当代码库出现问题时,您将不是唯一的责任。 😝

但是,拉取请求不仅仅是更改建议。 这是一个讨论提议的代码更改的专用论坛。 如果更改有任何问题,或者需要讨论某些代码更改,组织成员可以在拉取请求中发布反馈,甚至可以通过推送后续提交来调整代码。

让我们看看实际情况。

将您的fork存储库克隆到本地计算机。 创建一个新分支,我们将其命名为feature/first-proposal ,然后在分支中进行一些代码更改,并将提交推送到云中的fork。

如果您不知道如何操作,请参阅我的上一篇文章。

现在,在浏览器中打开fork库。 您会看到一个下拉菜单,用于更改项目,如下所示。

存储库中的分支列表

现在,通过在下拉列表中选择feature/first-proposal转到新分支。

通过单击分支选择下拉菜单旁边的“ New pull request ”,提出一个Pull请求。 现在,它将仅预览您将要提出的请求请求。 您可以更改任何详细信息,修改请求请求的名称,并更改要对其进行代码更改的父分支。 确定所有详细信息后,单击“ 创建请求请求 ”以确认提案。

您已成功向组织存储库提交了“拉”请求。 现在,我们需要做的就是让组织的任何其他成员通过共享此PR的链接来审核此拉取请求。 您可以从浏览器地址栏中复制它。

代码审查流程

提出PR时,组织的其他成员将检查您的代码,以确保您没有通过添加一些其他代码或删除一些代码来破坏项目的任何现有功能。 😝

反之亦然,您将必须查看队友的代码,以便您了解项目的进展。

那么我们该怎么做呢?

单击显示为“ 文件已更改 ”的标签,如下所示,这将打开一个页面,其中显示您或您的队友已更改的所有文件中所有颜色更改的所有代码。

拉取请求中的“文件已更改”选项卡

逐行文件更改

在上图中,绿色显示的代码是已添加到项目中的代码,红色显示的代码已从项目中删除。 同样,您可以在每行之前看到+或-符号,这与颜色代码的目的一样,是不言而喻的。

审阅者必须仔细检查所有代码更改,以查看代码中是否有明显的错误。 如果有任何错误,或者必须采取其他措施或错过某些事情,审阅者可以对请求发表评论。 您无需走到任何地方都可以发表评论,GitHub为您提供了一个很棒的功能,您可以在任何一行上发表评论,它将为以后查看PR的所有人指明确切的行。

将鼠标悬停在代码上时,您可以看到在行开始之前出现带有+ (加号)图标的蓝色按钮,单击该按钮将在同一行中打开一个注释框。 您可以键入任何内容,标记组织中的任何人,并且可以像执行其他任何注释框一样执行更多操作。 甚至支持表情符号。 😉

然后,请求者将通过电子邮件获得通知,并在GitHub中获得有关其PR中的评论的通知。 甚至审阅者都可以在任何聊天中通知请求者以立即引起他们的注意。 PR中的对话可以继续进行,也可以进行相关更改,并通过附加提交将其推送到同一分支。

在请求者解决了审阅者留下的所有评论之后,现在“ 文件已更改 ”页面将被更新,审阅者必须再次进行更改以确保在下一次提交中不会发生更糟的事情。 😝

请阅读本文,这是一篇有趣的文章,介绍了如何以礼貌和友好的方式完成拉取请求和代码审查过程。

一旦一切正常,审阅者必须通过单击“ 审阅更改 ”按钮来批准拉取请求,然后选中“ 批准 ”单选按钮进行提交,如下所示。

拉取请求中的批准选项

通过单击“ 合并拉取请求 ”按钮并确认,将拉取请求与组织的存储库的主分支合并 。

合并请求的合并选项

除非经过配置,否则无需批准提取请求即可与组织存储库合并。 因此,您可以自行检查代码更改并在未经批准的情况下将其与master分支合并。 但理想情况下,不建议这样做。

部署方式

在该组织的项目中,我们将通过FTP或某些容器化工具(Docker或Kubernetes)通过任何服务提供商(例如Amazon Web Services,Azure Cloud,Google Cloud Platform等)在云中的某个地方部署代码。

无论何时进行更改,我们都可能希望将代码部署到在任何云服务中创建的任何服务器实例。

如果您之前已经听说过,或者听说过它,那完全没问题。 我们现在不打算这样做,因为这是一个专门学习的广泛主题。

如果DevOps团队或其他人员在您的组织中完成这些工作,那么现在是时候学习并在此过程中与他们一起工作了,因为它也越来越成为开发人员的必备技能。

我们将不讨论部署步骤,因为每个服务提供商的官方网站上都有大量资源可用,而其他在线资源也可用。 我们只会看到如何使用git存储不同版本的代码库,以及如何区分最新发布的版本以简化部署过程。

标签

标签只不过是命名项目的发行版本,并以压缩形式将整个项目文件保留在任何阶段,作为备份。

该过程类似于分支机构。

让我们通过在项目目录上打开一个终端窗口来运行以下命令来创建标签。
git tag v1.0
v1.0是标签的名称。 就像分支名称一样,您可以输入任何其他内容。

让我们将此标记推送到云中的fork库中。
git push origin v1.0
上面的命令会将标签推送到您的fork中,这意味着您已在云中获取了备份项目文件。 它可以随时获取和恢复。 当部署的服务器崩溃时,您可以使用这些标签回滚到项目的先前版本。 通常,将标签推送到组织的存储库中,而不是任何人的fork回购中,以使标签在组织范围内可用。

那么,我们如何还原推送到云中的标签?

如您所知,命令git fetch origin将获取所有分支。 还将所有标签下载到本地计算机。

您可以通过执行git tag来查看所有git tag 。 它将列出本地计算机中所有标签的名称。

假设您进行了很多提交,然后移至其他分支,您的产品所有者/经理要求您回滚到v1.0版本,以返回到云服务器中的开发环境。

您可以使用上面列出的命令从云中获取所有标签。 您可以使用git checkout origin/v1.0还原特定标签,就像签出到分支一样。 备份后,它将从标记v1.0恢复代码。 现在,您可以继续将代码从本地计算机部署到服务器。

发布

由于进行了多个部署,您或您的团队成员将无法记住何时以及为什么部署哪个版本。 另外,我们现在无法跟踪服务器中存在哪个版本。 因此,我们需要在某个地方手动跟踪它,或者我们只需执行以下操作来跟踪项目的已发布实时版本。

您可以找到一个名为“ releases ”的标签,如下所示。

存储库中的“发布”选项卡

单击“ Tag ”标签,如下所示,以查看到目前为止已推送到您的云存储库的标签列表。

存储库中的标签选项卡

选择要命名为最新版本的标签。 然后点击右上角的“ Edit tag ”按钮,如下所示。

存储库中的编辑标签选项

现在它将要求您填写一些详细信息。不要担心它不是工作申请,它只需要输入几个字段。

在“ 发布标题 ”字段中输入任何名称,与标签名称相同即可。 然后键入有关此版本的任何摘要,以使您的队友根据需要知道该版本,否则将其留空。

继续并提交发布。

现在,您可以在“ 发行 ”页面的顶部标记为“ 最新发行 ”的标签上看到该标签的详细信息,如下所示。

版本列表中的最新版本详细信息

每当需要将新版本部署到云服务器时,您都可以按照相同的步骤来推送新标签。

太棒了! 如今,我们已经完成了组织中协作编程中遵循的基本工作流程。

高级功能

以下是Git中的一些高级功能,可用于使开发过程更智能。

  • 使用git stash功能将代码更改保存在内存中而不会提交或丢失
  • 编辑提交消息,将多个提交压缩为一个,删除分支中的提交,以及使用git rebase命令的“ Rebase”功能进行更多git rebase 。
  • 查看提交的整个日志,甚至使用git log命令更改代码。
  • 使用git cherry-pick命令使用过去在当前分支中进行的任何特定提交
  • 使用智能过滤选项(例如提交作者或代码中的特定单词)查看代码更改,以及使用git blame命令查找过去的所有提交

上述所有命令必须与其他一些选项一起使用,以使其真正起作用。 在使用它们之前先了解它们,并确保您不会折叠代码库且不会丢失任何东西。

如果您喜欢这篇文章,请给它鼓掌或两个。 即使您真的发现它很有用,也要五十。 😉

让我们在社交平台上建立联系,

GitHub,LinkedIn,Twitter

快乐的编码。 ‍💻🙂

–拉维拉杰·斯伯拉曼人