什么是版本控制?

已完成

版本控制系统 (VCS) 是跟踪文件集合更改的程序或程序集。 VCS 的一个目标是轻松撤回单个文件的较早版本或整个项目。 另一个目标是支持多个团队成员同时处理同一个项目(甚至是相同的文件),而不会影响各自的工作。

VCS 的另一个名称是软件配置管理 (SCM) 系统。 这两个术语通常可以互换使用,实际上,Git 的官方文档位于 git-scm.com。 从技术上讲,版本控制只是 SCM 中涉及的一种做法。 VCS 可用于除软件之外的项目(包括书籍和联机教程)。

你可以使用 VCS 执行以下操作:

  • 查看对项目所做的所有更改、更改时间和更改者。
  • 为每条更改添加一条消息,解释更改原因。
  • 检索整个项目或单个文件的以前版本。
  • 创建“分支”,可在其中进行试验性的更改。 通过此功能,可同时(由不同的人)处理多个不同的更改集(例如,功能或 bug 修复),而不会影响主分支。 稍后,可以将所需更改合并到主分支。
  • 将标记附加到版本 - 例如,用于标记新版本。

Git 是一种快速、通用、高度可缩放的免费开源 VCS。 它的主要作者是 Linux 的创建者 Linus Torvalds。

分布式版本控制

较早的 VCS 实例(包括 CVS,Subversion (SVN) 和 Perforce)使用集中式服务器来存储项目的历史记录。 这种集中意味着一台服务器也可能是单一故障点。

Git 是分布式的,这意味着项目的完整历史记录存储在客户端和服务器上。 可以在没有网络连接的情况下编辑文件、在本地签入文件,并在连接可用时与服务器同步。 如果服务器出现故障,你仍拥有该项目的本地副本。 从技术上讲,你甚至不必拥有服务器。 更改可以通过电子邮件传递或使用可移动媒体共享,但实际上没有人这样使用 Git。

Git 术语

要了解 Git,必须了解相关术语。 以下是 Git 用户常用的术语的简短列表。 目前不必关注各术语的详细解释;在完成本模块中的练习的过程中,你会逐渐熟悉所有的术语。

  • 工作树:包含正在处理的项目的嵌套目录和文件集。

  • 存储库 (repo):位于工作树的顶级的目录,Git 在其中保留了项目所有的历史记录和元数据。 存储库 (Repository) 一般称为 repo。 “空存储库”不属于工作树;它用于共享或备份。 空存储库通常是名称以 .git 结尾的目录,例如 project.git

  • 哈希:哈希函数生成的数字,它将文件或其他对象的内容表示为固定位数。 Git 使用 160 位长度的哈希。 使用哈希的一个好处是,Git 可以通过对文件内容进行哈希处理并将结果与先前的哈希进行比较,从而判断文件是否已更改。 如果文件的时间日期戳已更改,但文件哈希未更改,则 Git 知道文件内容未更改。

  • 对象:一个 Git 存储库包含四种类型的“对象”,每种对象均由 SHA-1 哈希进行唯一标识。 blob 对象包含普通文件。 “树”对象表示目录;它包含名称、哈希和权限。 “提交”对象表示工作树的特定版本。 “标记”是附加到提交的名称

  • 提交:用作动词时,“提交”的意思是生成提交对象。 此操作的名称来自对数据库的提交。 它的意思是你正在提交所做的更改,让其他人最终也可以看到它们。

  • 分支:分支是一系列已命名的关联提交。 分支上的最新提交称为“头”。 初始化存储库时创建的默认分支称为 main,在 Git 中通常名为 master。 当前分支的头称为“HEAD”。 分支是 Git 的一项非常有用的功能,因为通过它,开发人员可在分支中独立(或协同)工作,然后将其更改合并到默认分支中。

  • 远程库:远程库是对另一个 Git 存储库的已命名引用。 创建存储库时,Git 会创建一个名为“origin”的远程库,这是用于推送和拉取操作的默认远程库。

  • 命令、子命令和选项:Git 操作通过 git pushgit pull 等命令执行。 git 是命令,pushpull 是子命令。 子命令指定需要 Git 执行的操作。 命令通常带有选项,这些选项使用连字符 (-) 或双连字符 (--)。 例如 git reset --hard

你很快就会熟悉以上术语(例如“push”和“pull”)。 但是你需要从某个部分开始学习,完成本模块后,再回顾此术语表可能对你有所帮助。

Git 命令行

有一系列可用于 Git 的不同 GUI,包括 GitHub Desktop。 许多程序编辑器(如 Microsoft Visual Studio Code)也具有与 Git 的接口。 它们的工作方式各异,局限性也各不相同。 它们都不能实现 Git 的所有功能

本模块中的练习使用 Git 命令行 - 具体来说,是在 Azure Cloud Shell 中执行的 Git 命令。 但是,无论使用哪种操作系统,Git 的命令行接口的工作方式都相同。 另外,借助该命令行,可以利用 Git 的全部功能。 仅通过 GUI 查看 Git 的开发人员有时会遇到无法解决的错误消息,因此他们必须使用命令行才能解决问题。

Git 和 GitHub

使用 Git 时,你可能想知道它提供的功能与 GitHub 上提供的功能之间的区别。

如前文所述,Git 是一种分布式版本控制系统 (DVCS),多名开发人员和其他参与者可通过它共同处理同一项目。 它提供了一种方法来处理一个或多个本地分支,然后将它们推送到远程存储库。

GitHub 是一种将 Git 用作其核心技术的云平台。 GitHub 简化了协作处理项目的过程,提供了网站、更多命令行工具,以及可使开发人员和用户一起工作的总体流程。 GitHub 充当先前提到的“远程存储库”。

GitHub 提供的主要功能包括:

  • 问题
  • 讨论
  • 拉取请求
  • 通知
  • 标签
  • 操作
  • 前叉
  • 项目

若要详细了解 GitHub,请参阅 GitHub 简介、Microsoft Learn 模块或 GitHub 入门帮助文档。

下一步是你亲自试用 Git!