设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 IT综合资讯 查看内容

给那不怕似“有向无环图”字眼的人简介git

2013-11-22 11:35| 发布者: joejoe0332| 查看: 2769| 评论: 0|原作者: bruce-accumulate|来自: 伯乐在线

摘要:   给那些不怕类似“有向无环图”这样字眼的人简单介绍一下git的内部实现。  存储:  简单的说,git的对象存储就是一堆对象的有向无环图,一堆被分成几种类型的对象。这些对象都压缩存储,并且以其自身的SHA-1 ...

  给那些不怕类似“有向无环图”这样字眼的人简单介绍一下git的内部实现。


  存储:


  简单的说,git的对象存储就是一堆对象的有向无环图,一堆被分成几种类型的对象。这些对象都压缩存储,并且以其自身的SHA-1哈希值作为唯一标示。(顺便说下,这个哈希值不是对象所表示文件内容的SHA-1,而是对象本身在git中的表示。原文:that,incidently,isn’t the SHA-1 of the contents of the file they represent,but of the representation in git).


git-storage.1


  blob:最简单的对象,一些字节而已。可能是一个文件,也可以是一个符号链接或者类似的其他东西。指向blob的对象定义了git中的语义(看到后面大家会理解)。


git-storage.2


  tree:目录被表示成tree对象。他们指向了包含文件内容的blobs(文件名,访问权限等呗保存在tree对象里),和其他tree对象(代表了子目录)。

 

  再一个有向无环图里,如果一个节点指向另外一个节点,那么被指向节点就依赖指向它的那个节点:没有指向节点,被指向节点就不能存在。没有被指向的节点会被当成垃圾,或被git gc回收,或使用git lost-found复原(这点和文件系统把没有文件名指向的inode放到lost+found目录供以后恢复类似)。


git-storage.3


  commit:一个commit指向一个tree对象,这个tree对象代表了commit发生当时的文件状态。commit可以指向0..n个其他的commit作为他的父亲节点。如果commit有多个父亲节点,那意味着这个commit是一个merge;没有父亲节点意味着该commit是一个initial commit。有趣的是git允许有多个initial commit,这意味着多个project的merge。commit对象的主体是commit信息(message)。


git-storage.4



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部