本文内容简述

Untitled

0x1、Git概述——分布式版本控制系统

了解Git相关的概念,有助于后续命令的掌握~

1. 什么是版本管理系统

VCS(Version Control System),一种用于记录一个或多个文件内容变化 历史,以便将来能对特定版本的历史记录进行查看,更改,备份还原的系统。 可以简单类比为「游戏存档」,打Boss前存下档,没过关,重新读档; 分支剧情,想体验不同选择触发的不同剧情,可以存多个档, 想玩哪个读哪个。

VCS一般分为下述三类:

使用简单的数据库来记录文件的历史更新差异,比如RCS。

用一个服务器来保存所有文件的修订版本,协同工作的人连接这个服务器, 获取或提交文件更新,比如SVN。 这种协同方式有个两个明显的缺点: 1.「需要联网」:同步和推送更新速度受带宽限制,内网还好,外网可能会有点慢了(大文件); 2.「依赖中央服务器」:每个人的本地只有以前所同步的版本,如果服务器宕(dang)机了,谁都无法获取或提交更新。

每个用户拥有完整的提交历史,支持离线提交更改,查看历史提交记录等。中央服务器更多的只是用作更改合并,同步的工具,比如Git。 从根本上来说,Git是一个内存寻址的文件系统,根据文件的Hash值来定位文件。 这个40位的Hash值使用SHA1算法生成,由两部分拼接: header = "<type>" + content.length + "\0" (参数依次为:对象类型,数据字节长度,空字节(用于分隔header与content) hash = sha1(header+content),这里的拼接是二进制级别的拼接,而非字符串拼接。

2. Git与SVN的区别

Git和SVN除了上面说的联网需求不同外,还有「存储差异」:

SVN关心:文件内容的具体差异;而Git关心:文件整体是否发生改变。 SVN每次提交记录的是:「哪些文件进行了修改,修改了哪些行的哪些内容」。 如图,Version 2中记录的是文件A和C的变化,而Version 3中记录文件C的变化,以此类推; 而Git中,并不保存这些前后变换的差异数据,而是保存整个缓存区中的所有文件, 又称快照,「有变化的文件保存,没变化的文件不保存,而是对上次保存的快照做一个链接」, 因为这种不同的保存方式,使得Git切换分支的速度比SVN快上不少。

当然SVN也有它的优点,比如「权限控制」,可以设定每个账户的读写权限,而Git中 则没有响应的权限控制。至于用哪个的,还是看公司要求吧~

3. Git的四个组成部分

简单说下Git的四个组成部分: