上手Git的一种学习思路——先学实现,再敲命令

Git起源

Git是一个分布式版本控制系统,缔造者是大名鼎鼎的林纳斯·托瓦茲 (Linus Torvalds),Git 最初的目的是为了能更好的管理 Linux 内核源码。

如果说Linux项目促成了开源软件的成功并改写了软件行业的格局,那么Git则是改变了全世界开发者的工作方式和写作方式。

请务必记住Git这三种状态

  • 已提交(committed),表示数据已经安全的保存在本地数据库中
  • 已修改(modified),表示修改了文件,但还没保存到数据库中
  • 已暂存(staged),表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中

Git的三个工作区域

  • Git仓库,用来保存项目的元数据和对象数据库
  • 工作目录,对项目的某个版本进行独立提取
  • 暂存区域,保存了下次将提交的文件列表信息,也可以叫“索引”

Git的工作流程是

  • 在工作目录中修改文件
  • 暂存文件,将文件的快照放入暂存目录
  • 提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录

内容实现

本文思路是先理解Git的实现,这样对Git的使用会更容易。

Git的本质是一系列的文件对象集合,代码文件是对象、文件目录树是对象、commit也是对象。这些文件对象的名称即内容的SHA1值,SHA1哈希算法的值为40位。Linus将前两位作为文件夹、后38位作为文件名。可以在.git目录里的objects里看到有很多两位字母/数字名称的目录,里面存储了很多38位hash值名称的文件,这就是Git的所有信息。

BLOB:即二进制对象,就是Git存储的文件。存储文件在每一个版本的完全信息。仅记录文件的内容。

TREE:目录树对象。是一个时间切片中的目录树信息抽象,包含了文件名、文件属性及BLOB对象的SHA1值信息。

CHANGESET:即Commit对象。一个CHANGESET对象中记录了该次提交的TREE对象信息(SHA1),以及提交者、提交备注等信息。CHANGESET中会记录父节点CHANGESET对象的SHA1值,通过比较本节点和父节点的TREE信息来获取差异。

Git分支

Git的显著优点,就是版本的分支(branch)和合并(merge),用起来十分方便。

Git的分支操作只生成一个指向当前版本(又称快照)的指针,非常快捷易用。

同时如果不加注意,很可能会留下很多枝枝蔓蔓的版本库,到处都是分支,完全看不出主干发展的脉络。

因此Git是有好的分支策略的。

  1. 主分支Master

    代码库有且只有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。

    Git主分支默认叫做Master。是自动建立的,版本库初始化以后,默认是在主分支在进行开发。

  2. 开发分支Develop

    日常开发应该在另一条分支上完成。把开发用的分支叫做develop。

    如果想正式对外发布,就在Master分支上,对Develop分支进行合并(merge)。

  3. 除了常设分支以外,还有一些临时性分支,用于应对一些特定目的的版本开发。临时性分支主要有三种:功能分支、预发布分支、修补bug分支

    1. 功能分支:为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。
    2. 预发布分支:合并到Master分支之前,我们可能需要有一个预发布的版本进行测试。
    3. 修补bug分支:软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值