# 一、Git 概览——一种信仰

虽然这本书侧重于 GitHub，但 Git 中的一些基本概念和术语将有助于您在学习 GitHub 时理解。

工作目录是计算机或网络共享上的一个文件夹。每个开发人员都有所有代码和相关文件的完整副本。您可以在工作目录中完成所有开发工作，并让 Git 管理该文件夹的版本控制方面。

Git 将这个工作目录作为一个存储库，简称为 repos。当 Git 管理该文件夹时，您将获得 Git 提供的所有版本控制优势。

在工作目录中，您可能会发现一些额外的文件，用于向 Git 提供关于文件夹中文件的说明。这些是。属性文件告诉 Git 如何处理各种文件进行比较操作。忽略文件指示 Git 某些文件(基于扩展名)不应由 Git 处理。这些文件将在后面的章节中详细介绍。

![](img/00004.jpeg)

图 1:启动 Git 空工作目录

创建存储库时，Git 会将这些文件的默认版本添加到您的工作目录中。您可以在现有目录上创建一个 Git 存储库，或者让 Git 为您创建一个新的存储库(和工作文件夹)。您也可以克隆现有的存储库。克隆是存储库的完整副本(包括历史记录)。无论您如何创建它，现在都将有一个 Git 存储库开始工作。

克隆是存储库的完整副本。例如，您可以创建一个存储库的副本，修复一些错误，然后将代码提交回存储库。但是，这假设您对存储库具有写访问权限。

分叉是在您的帐户下为您无法直接更新的存储库创建的存储库副本。您可以在副本中进行代码更改，然后提交一个请求，要求将您的更改集成回主存储库。这在开源项目中经常发生，许多合作者帮助作者解决问题，但是作者决定何时将它们包含在主要分支中。

拉取请求是对存储库所有者的请求，请求将您建议的更改合并回代码库。这通常是由修复了报告问题的合作者完成的。

| ![](img/00003.gif) | 注意:拉/推术语可能会令人困惑。“推”通常意味着将信息从中心位置移动到订户，而“拉”意味着订户请求信息。在 GitHub 中，“订阅者”是存储库所有者，他希望从您(开发人员)的本地存储库中获取更改。如果您将所有者视为订阅者，“拉取请求”的定义意味着:“嘿，订阅者，我有一些您可能喜欢的更改……” |

分支是一组完整的存储库文件。默认情况下，Git 创建一个主分支。您可以创建额外的分支来测试开发思路，而不会影响主分支。Git 允许您比较分支之间的代码，并在某个时候将代码从“dev”分支合并回主分支。这允许多个协作者在不干扰基础代码的情况下处理一个项目。

常见分支可能包括:

*   功能分支:专门向代码库添加新功能的分支
*   发布分支:代码计划用于下一个发布的分支
*   主分支:所有代码最终合并到的默认分支
*   开发分支:活跃的开发分支，代码在这里工作

如何创建分支取决于你，或者即使你想。然而，如果许多合作者都在项目中工作，分支使得开发增强变得更加容易，而不会失去从主分支构建发布的能力。

跟踪文件是 Git 管理的工作目录(存储库)中的文件。当您添加新文件或更新现有文件时，Git 会跟踪这些更改。在某些时候，您会希望通过 commit 命令将这些文件添加到存储库中。

提交是将跟踪文件中的任何更改添加到存储库中的过程。您将输入摘要和描述，然后将文件添加到存储库中。Git 将维护一个存储库中所有提交的历史记录。

#### 提交消息

提交消息是应用于提交到存储库的当前文件集的摘要和描述。

合并是将代码从一个分支合并到另一个分支的过程。分支中的修复和增强完成后，您通常希望将代码合并回主分支。Git 提供了不同的工具来显示代码变化和帮助合并过程。

Git 允许您查看与正在使用的分支相比所做的所有更改。您可以查看这些更改，并决定将哪些文件更改提交给分支。例如，您可能已经完成了所更改的五个文件中的两个，并且希望分别提交它们。Git 将报告所有五个文件中的变化。您提交这两个文件，Git 将它们添加到历史记录中，同时仍然跟踪其他文件。这允许您创建逻辑变更集，而不仅仅是基于日期的变更。

Git 保留了所有提交的更改的历史日志，因此您可以查看任何之前提交的更改。如果您已经克隆了一个存储库，那么您也将拥有该存储库中的提交历史。

基本的 Git 流程是创建一个存储库，并进行更改和添加。然后，提交尽可能多的变更集。Git 将报告跟踪文件的更改，并允许您决定如何组织提交。一旦完成了多次提交，就可以使用 Git 的提交历史来查看项目状态。