Git初探之入门

2018.04.19

很早就知道Github,上面有很多的开源项目,注册账号挺早,但是一直没用。去年弄了这个博客,是基于Hexo框架的,通过git进行配置和发布文章之类的。也就了解了上传文章需要的几个命令,但是对深层次的原理并不是很懂。因为托管在Coding平台(类似Github),也了解了一点点代码仓库的东西。打算这段时间学习下Git,以后自己做的小项目都托管在Github上。

作为和Git的正式初接触,首先要了解下Git的基础知识,去探索它是如何来的以及为什么需要它。

关于版本控制

按照时间顺序记录某一个或一系列文件的变更的一套系统。这让我想到了之前每次上传Hexo文章都有一个类似版本号的东西出现在我的博客项目页面,猜测就是用那个区别不同时间上传的版本的吧。

分布式版本控制系统

对于一个分布式版本控制系统来说,客户端并非仅仅是检出文件的最新快照,而是对代码仓库进行完整的镜像。不管哪个服务器出现故障任何一个客户端都可以使用自己的本地镜像来恢复服务器。每一次检出操作实际上都是对数据的一次完整备份。比集中式版本控制好上很多。

Git简史
  • 2002年,Linux项目开始用一个叫做BitKeeper的专有分布式系统。
  • 2005年,linux内核开发者社区与BitKeeper的研发公司破裂,该公司收回了软件的免费使用权。
  • Linux开发社区(尤其是Linux之父Linus Torvalds)开发了自己的版本控制系统——Git。
Git基础
  • Git与其他版本控制系统最大的不同在于其对待数据的方式。从概念上来说,其他大多数版本控制系统是以文件变化列表的方式存储信息。但Git更像是将数据视为一个微型文件系统的一组快照。这让我想起来之前上信息安全实验课的时候,每次上课前老师都让把虚拟机恢复到一个快照,这样就能保证每次上课用的虚拟机都是干净的。还有学校机房的电脑,每次关机都会将电脑一键还原。这两个例子都是存储一个快照并还原,Git应该就是存储每一次保存的快照,想还原哪个还原哪个。
  • Git的大部分操作只需要用到本地文件和资源,一般无需从网络中的其他计算机中获取信息。因为项目完整的历史记录都存在本地磁盘上,所以绝大多数操作几乎瞬间就能完成。
  • Git中所有数据在存储前都会执行校验和计算,所以不可能在Git不知情的情况下更改文件或目录的内容。这项功能根植于Git的最底层。所采用的校验机制叫做SHA-1散列,这是由40个十六进制字符(0-9和a-f)所组成的字符串,它是根据文件内容和Git的目录结构计算所得到的。
  • 在Git中进行处理时,基本上所有的操作都只是向Git数据库中添加数据。
  • 在Git中,文件可以处于以下三种状态之一:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示数据库已经安全地存入本地数据库中。已修改表示已经改动了文件,但尚未提交到数据库。已暂存表示对已修改文件的当前版本做出了标识并将其加入到下一次要提交的快照中。