Git
1、Git
原意饭桶(哈哈),但特指一个开源的分布式版本控制系统
2、版本控制系统
一个或若干文件内容有可能随时间/需求而不断进行修改,版本控制就是一种能够记录这种变化过程中且能查阅历史上各个特定版本情况的系统
即版本控制系统保存了所修改文件的历史各个版本且能随时查阅。
3、分布式版本控制系统
(1)集中式版本控制系统
特点:由单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。(即大家都连接到一个服务器进行工作)
缺点:若中央服务器发生单点故障,轻则宕机导致大家无法协同工作,文件不能更新,重则磁盘故障且未备份时,导致数据丢失
(2)分布式版本控制系统
特点:工作人员每次工作时,其所在的客户端不只提取最新版本的文件快照,而且把代码仓库((即历史的各个文件版本))完整地镜像到本地进行更新
优点:任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份
Git即分布式的版本控制系统,分布式的好处不言而喻:
(1)工作时不需联网:因为已经从服务器中将完整代码镜像到本地了
(2)更加安全:服务器故障时,可以通过本地镜像恢复
Git系统原理
(1)版本库
当你将一个项目镜像到本地或创建一个 git 项目,项目目录下会有一个隐藏的 .git
子目录。这个目录是 git 用来跟踪管理版本库的,千万不要手动修改。
(2)哈希值
Git 中所有数据在存储前都计算校验和,然后以校验和来引用。这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。
Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样的<br />
(3)文件状态
在 GIt 中,你的文件可能会处于三种状态之一:
已修改(modified):已修改表示修改了文件,但还没保存到数据库中。
已暂存(staged):已暂存表示对一个已修改文件的当前版本做了标记(这意味着一个新的版本已经形成了,只不过还没提交),使之包含在下次提交的快照中(暂存一次就意味着形成了一个版本,故快照里可能包含多个已修改而得到的新版本,当然还有以前的旧版本,我们镜像下来后一般只对最新版本进行多次修改更新)
已提交(committed):已提交表示数据已经安全的保存在本地数据库中。
(4)工作区域:
与文件状态对应的,不同状态的文件在 Git 中处于不同的工作区域
工作区(working):当你 git clone
一个项目到本地,相当于在本地克隆了项目的一个副本。工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。(工作区即文件所要进行修改的内容部分所占的区域)
暂存区(staging):暂存区是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引’‘,不过一般说法还是叫暂存区。
本地仓库(local):提交更新,找到暂存区域的文件,将快照永久性存储到 Git 本地仓库。
远程仓库(remote):以上几个工作区都是在本地。为了让别人可以看到你的修改,你需要将你的更新推送到远程仓库。同理,如果你想同步别人的修改,你需要从远程仓库拉取更新。