Git 和 GitHub

所有开发者都会使用某种版本控制系统VCS),这是一种工具,允许他们与其他开发者协作完成项目,而无需担心彼此覆盖工作,并在稍后发现问题时回滚到代码库的先前版本。最流行的 VCS(至少在 Web 开发人员中)是Git,以及GitHub,这是一个提供存储库托管和多个用于处理存储库的工具的网站。本模块旨在教你关于这两者你需要了解的内容。

概述

VCSes 对于软件开发至关重要

  • 你很少会完全独自完成一个项目,一旦你开始与其他人合作,你就会开始冒着与他人工作冲突的风险——当你们两人都尝试在同一时间更新同一部分代码时就会发生这种情况。你需要建立某种机制来管理这些事件,并帮助避免由此导致的工作损失。
  • 在独自或与他人合作完成项目时,你希望能够将代码备份到中心位置,这样如果你的电脑出现故障,代码就不会丢失。
  • 你可能还想在以后发现问题时回滚到早期版本。你可能已经在自己的工作中开始这样做,通过创建同一文件的不同版本,例如 myCode.jsmyCode_v2.jsmyCode_v3.jsmyCode_final.jsmyCode_really_really_final.js 等,但这确实容易出错且不可靠。
  • 不同的团队成员通常希望创建他们自己的代码的独立版本(在 Git 中称为分支),在该版本中处理新功能,然后在完成后以受控的方式将其合并(在 GitHub 中我们使用拉取请求)到主版本中。

VCSes 提供了满足上述需求的工具。Git 是 VCS 的一个示例,而GitHub 是一个网站 + 基础设施,它提供了一个 Git 服务器以及许多非常有用的工具,用于单独或团队协作处理 git 存储库,例如报告代码问题、审查工具、项目管理功能(例如分配任务和任务状态)等等。

注意:Git 实际上是一个分布式版本控制系统,这意味着包含代码库的存储库的完整副本会复制到你的电脑上(以及其他每个人的电脑上)。你对自己的副本进行更改,然后将这些更改推送到服务器,管理员将决定是否将你的更改与主副本合并。

先决条件

要使用 Git 和 GitHub,你需要

  • 安装了 Git 的台式电脑(请参阅Git 下载页面)。
  • 一个用于 Git 的工具。根据你喜欢的使用方式,你可以使用Git GUI 客户端(我们推荐 GitHub Desktop、SourceTree 或 Git Kraken),或者坚持使用终端窗口。事实上,即使你打算使用 GUI,了解至少 Git 终端命令的基础知识可能对你也很有用。
  • 一个GitHub 账户。如果你还没有,请立即使用提供的链接注册。

在先决条件知识方面,你无需了解任何关于 Web 开发、Git/GitHub 或 VCSes 的知识即可开始本模块。但是,建议你了解一些编码知识,以便你拥有合理的计算机素养,以及一些存储在存储库中的代码!

最好你还具备一些基本的终端知识,例如在目录之间移动、创建文件以及修改系统 PATH

注意:GitHub 不是你可以与 Git 一起使用的唯一站点/工具集。还有其他替代方案,例如GitLab,你可以尝试使用它们,你也可以尝试设置自己的 Git 服务器并使用它而不是 GitHub。在本课程中,我们只坚持使用 GitHub,以提供一种可行的方法。

指南

请注意,下面的链接会将你带到外部网站上的资源。最终,我们的目标是拥有自己的 Git/GitHub 专门课程,但就目前而言,这些课程将帮助你掌握手头的主题。

你好,世界(来自 GitHub)

这是一个很好的起点——这份实用指南让你立即开始使用 GitHub,学习 Git 的基础知识,例如创建存储库和分支、提交以及打开和合并拉取请求。

Git 手册(来自 GitHub)

这份 Git 手册深入探讨了更多内容,解释了什么是 VCS、什么是存储库、基本 GitHub 模型的工作原理、Git 命令和示例等等。

派生项目(来自 GitHub)

当你想要为其他人的代码做出贡献时,派生项目至关重要。本指南解释了如何操作。

关于拉取请求(来自 GitHub)

一个管理拉取请求的有用指南,即你的建议代码更改如何传递给他人的存储库以供考虑。

掌握问题(来自 GitHub)

问题就像 GitHub 项目的论坛,人们可以在其中提问和报告问题,你也可以管理更新(例如分配人员修复问题、澄清问题、让人们知道问题已解决)。本文介绍了你需要了解的关于问题的信息。

注意:你可以使用 Git 和 GitHub 做更多的事情,但我们认为以上内容代表了你有效开始使用 Git 所需的最低限度。随着你深入了解 Git,你会开始意识到,当你开始使用更复杂的命令时,很容易出错。别担心,即使是专业的 Web 开发人员有时也会发现 Git 令人困惑,并且经常通过在网上搜索解决方案或咨询诸如Git 的飞行规则该死的,git! 之类的网站来解决问题。

另请参阅