内容纲要

🗂 | 本文目录: Git 指南


简介

Git 是一个自由和开源的分布式版本控制系统,旨在以速度和效率处理从小型到非常大的项目。

Git 易于学习,占用空间小,性能快如闪电。它超越了像 Subversion、CVS、Perforce 和 ClearCase 这样的 SCM 工具,具有廉价的本地分支、方便的暂存区和多种工作流程等特点。

在 Git 网站了解更多内容:https://git-scm.com/

什么是版本控制系统

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

为什么需要版本控制系统

举个例子,比如说你是一名文字工作者,在没有版本控制的时候,甲方每次让你修改的文稿你可能会以改文件名的方式存成类似这样:

  • 初稿.docs
  • 修改1.docs
  • 修改2.docs
  • 终稿.docs
  • 终稿改.docs
  • 终稿不再改.docs

这样的改文件名存储方法混乱不堪,有时误操作修改了不想修改的文件甚至误删了它,时间一久也无法记得每个文件到底有什么不一样。

而使用「版本控制」后,不仅可以实现项目的统一管理,将每次修改提交成一次版本历史,之后通过版本历史及其描述可以知道文件的变化细节,还可以实现比较文件的修改、查看是谁修改了哪些地方、将整个项目或其中选定的文件回溯到之前某个历史版本中等等操作。

为什么是 Git

分支和合并

Git 的分支模型使它真正与几乎所有其他 SCM 区别开来。

Git 允许并鼓励您拥有多个可以完全独立于彼此的本地分支。创建、合并和删除这些开发线只需要几秒钟。

这意味着你可以这样做:

  • 无摩擦上下文切换:创建一个分支来尝试一个想法,提交几次,切换回你的分支,应用一个补丁,切换回你正在实验的地方,然后把它合并进来。
  • 基于角色的代码线:有一个分支始终只包含用于生产的内容,另一个分支用于合并测试工作,还有几个小分支用于日常工作。
  • 基于功能的工作流程:为你正在做的每个新功能创建新的分支,这样你就可以在它们之间无缝切换,然后在该功能被合并到你的主线时删除该分支。
  • 一次性的实验:创建一个分支进行实验,当意识到它不起作用,然后就可以直接删除它–放弃工作–没有人会看到它(即使你在这期间推送了其他分支)。

值得注意的是,当你推送到远程仓库时,你不需要推送所有的分支。你可以选择只分享你的一个分支,几个分支,或者全部分支。这可以让人们自由地尝试新的想法,而不必担心要计划如何以及何时合并或与他人分享。其他系统也有办法做到这一点,但所涉及的工作要困难得多,而且容易出错。Git 使这个过程难以置信地简单,并且它改变了大多数开发人员学习它时的工作方式。

小而快

Git 是快速的。Git 几乎所有的操作都是在本地执行的,这使得它在集中式系统上具有巨大的速度优势,因为集中式系统必须不断地与某个服务器进行通信。

Git 是为了在 Linux 内核上工作而建立的,这意味着它从第一天起就必须有效地处理大型仓库。Git 是用 C 语言编写的,减少了与高级语言相关的运行时间的开销。速度和性能从一开始就是 Git 的主要设计目标。

分布式

任何分布式 SCM(包括 Git)最棒的特点之一是它是分布式的。这意味着不需要对当前的源代码进行「checkout」,而是对整个仓库进行「clone」。

  • 多次备份:这意味着即使你使用的是一个集中的工作流,每个用户实际上都有一个主服务器的完整备份。在发生崩溃或损坏时,这些副本中的每一个都可以被推送上去以替换主服务器。实际上,Git 没有单点故障,除非只有一个仓库的副本。
  • 任何工作流:由于 Git 的分布式特性和出色的分支系统,几乎可以轻松实现无尽的工作流程。

数据保障

Git 使用的数据模型确保了项目的每一个部分的加密完整性。每个文件和提交在签出时都会进行校验和(checksumed)并由其校验和检索。从 Git 中不可能得到任何东西,除了你放进去的那些东西。

要改变 Git 仓库中的任何文件、日期、提交信息或任何其他数据,而不改变之后的一切 ID,也是不可能的。这意味着,如果你有一个提交ID,你不仅可以保证你的项目与提交时一模一样,而且可以保证它的历史没有被改变。

大多数集中式版本控制系统默认情况下不提供这种完整性。

暂存区

与其他系统不同,Git 有一个叫做「暂存区(staging area)」或「索引(index)」的东西。这是一个中间区域,在完成提交之前可以对提交的内容进行格式化和审查。

Git 与其他工具的一个不同之处在于,可以快速暂存一些文件并提交它们,而不必提交工作目录中的所有其他修改过的文件,也不必在提交时在命令行中列出这些文件。

这允许你只对修改过的文件的部分内容进行阶段性修改。对文件进行两个逻辑上不相关的修改之后才意识到忘记提交其中一个的日子已经一去不复返了。现在你可以为当前提交阶段进行所需的更改,为下一次提交阶段进行其他更改。这个特性可以根据需要对文件进行多种不同的更改。

当然,如果你不想要这种控制,Git 也可以很容易地忽略这个功能——只需在提交命令中加入 -a 选项,就可以把所有文件的修改都加入到暂存区域。

免费和开放源码

Git 是在 GNU General Public License 2.0 版本下发布的,这是一个开放源代码许可证。Git 项目选择使用 GPLv2 来保证你分享和改变自由软件的自由——确保软件对其所有用户都是自由的。

「Git」一词和 Logo 受到使用限制以避免混淆,详情请见 Git 的商标政策

下载安装

除了在官方网站下载,还可以通过各种包管理工具进行安装 Git.

例如 macOS 用户在安装 Homebrew 后可以使用命令安装:

$ brew install git

Debian 及基于 Debian 的 Linux 用户可以使用 APT 进行安装:

$ sudo apt install git-all

RHEL、Fedora 等用户可以使用 DNF 安装:

$ sudo dnf install git-all

在成功安装后,使用命令:

$ git --version

如果能看到版本号就表示安装成功了。

最小配置

安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改。

macOS 或 Linux 用户可以使用自带的「终端」、Windows 用户可以使用「Git Bash」或「Windows Terminal」,然后输入两条命令:

$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]

这里的 --global 选项还有一些别的选择:

  • --local:只针对某个仓库;
  • --global:针对当前用户的所有仓库;
  • --system:针对系统上所有用户的仓库;

--system 选项不常用,而一般需要使用选项 --global 配置适用于当前用户的所有仓库的用户信息,而针对某个特定仓库需要使用不同于 --global 所配置的用户信息时,使用选项 --local

在配置完成用户信息后,可以查看检查一下:

$ git config --list --global

如果配置错误了可以重新使用上述两条命令输入正确的用户信息,旧的用户信息就会被覆盖了。

图形化客户端

关于 Git 的图形化客户端,你可能已经知道诸如 SourceTree、Github Desktop 等等,Git 网站上也收录了各平台的 Git 图形化客户端:GUI Clients

但还是希望先把图形化客户端放一放,大多数图形化客户端只实现了 Git 所有功能的一个子集以降低操作难度,只有在命令行模式下才能执行 Git 的所有命令,在学会 Git 命令后操作图形化客户端时想必不会有什么困难,但反之你可能就会有一种「知其然不知其所以然」的感觉(可能你已经有了这样的想法所以才寻找 Git 教程)。

此外,由于每个人的想法与侧重点不同,不同的人常常会安装不同的图形化客户端软件,但所有人一定会有命令行工具。

所以,先从命令行开始吧。

学习资源

帮助命令

最简单直接获取帮助信息的方式是使用帮助命令,如前文所述的 config,你想了解更多关于它的信息可以使用以下几条命令:

$ git help config
$ git config --help
$ git config -h # 不想看长篇大论,只想要快速参考
$ man git-config

如果想知道别的就将上述中的 config 换成你想要查询的就可以了。

Pro Git

关于学习 Git 首推《Pro Git》,应该没有比它更更好的书籍了:

Pro Git(第二版)是你对 Git 及其在现代世界的使用的全面更新的指南。自从 Linus Torvalds 首次为 Linux 内核开发开发出 Git 以来,它已经走过了漫长的道路。自 2005 年问世以来,它已经在开源世界掀起了一场风暴,本书教你如何像专家一样使用它。
有效且实施良好的版本控制是成功的 Web 项目的必要条件,无论是大型项目还是小型项目。通过本书,你将学会如何掌握分布式版本工作流的世界,充分使用 Git 的分布式功能,并扩展 Git 以满足你的各种需求。
由 Git 专家 Scott Chacon 和 Ben Straub 撰写的《Pro Git(第二版)》建立在第一版大获成功的基础上,现在针对 Git 2.0 版本进行了全面更新,还包括一个关于 GitHub 的不可或缺的章节。这是满足你所有 Git 需求的最佳书籍。

《Pro Git(第二版)》在线阅读:Git – Book

Git Reference

Git Reference 列举了 Git 命令的详细信息,如果你对某条命令的某个选项存在疑惑,可以在这上面寻求答案。

Git Cheat Sheet

Git Cheat Sheet 是一个漂亮的 Git 备忘单,它将命令划分在不同的工作流程,方便你查阅不同工作区域的相关命令。

Learn Git Branching

Learn Git Branching 是一个在线练习实践 Git 的绝佳教程,你可以在沙盒里执行 Git 相应的命令,还能看到每个命令的执行情况;

通过一系列刺激的关卡挑战,逐步深入的学习 Git 的强大功能,在这个过程中你可能还会发现一些有意思的事情。