git源码阅读

5 篇文章 0 订阅

下载git0.0.1版本的源码,第一次开源代码,只有几个文件,最能了解项目的意图

如下图

 

git 源码解析(一)init-db

https://blog.csdn.net/chenwh_cn/article/details/84928477

 

Git目录结构:

当在一个新目录或已有目录执行 git init 时,Git 会创建一个 .git 目录。 这个目录包含了几乎所有 Git 存储和操作的对象。 如若想备份或复制一个版本库,只需把这个目录拷贝至另一处即可。 本章探讨的所有内容,均位于这个目录内。 该目录的结构如下所示:

$ ls -F1

HEAD

config*

description

hooks/

info/

objects/

refs/

该目录下可能还会包含其他文件,不过对于一个全新的 git init 版本库,这将是你看到的默认结构。 description 文件仅供 GitWeb 程序使用,我们无需关心。 config 文件包含项目特有的配置选项。 info 目录包含一个全局性排除(global exclude)文件,用以放置那些不希望被记录在 .gitignore 文件中的忽略模式(ignored patterns)。 hooks 目录包含客户端或服务端的钩子脚本(hook scripts),在 Git 钩子 中这部分话题已被详细探讨过。

剩下的四个条目很重要:HEAD 文件、(尚待创建的)index 文件,和 objects 目录、refs 目录。 这些条目是 Git 的核心组成部分。 objects 目录存储所有数据内容;refs 目录存储指向数据(分支)的提交对象的指针;HEAD 文件指示目前被检出的分支;index 文件保存暂存区信息

Git的数据内容存储:

https://www.git-scm.com/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-Git-%E5%AF%B9%E8%B1%A1

 

Git的对象:

Git对象

树对象

提交对象

标签对象

 

 

  1. Git服务器为何占用内存高?
  2. Git的数据存储方式?

问题1,2在以下文章中解答

https://www.cnblogs.com/lbzhu/p/7524380.html

 

我们这次遇到的file mode跟linux 中的又不太一样,因为他多了100。其实100表示普通文件,其他常见类型如下所示:

0100000000000000 (040000): Directory

1000000110100100 (100644): Regular non-executable file

1000000110110100 (100664): Regular non-executable group-writeable file

1000000111101101 (100755): Regular executable file

1010000000000000 (120000): Symbolic link

1110000000000000 (160000): Gitlink

之后可以使用如下命令让git忽略文件权限的改变,可以在.git/config中查看到相关设置是否生效。

git config --add core.filemode false

 

 

 

总结:通过以上几个网页的信息,以及观看第一版本的源码,主要根据git官网信息的介绍,跟着敲一遍,基本上就解决了我的疑惑,我的疑惑的问题是,git是怎样做到上传下载中保持文件的权限不变的?原因是git采用文件记录的方式在上传文件,将文件视为git对象,将目录视为树对象,将各个文件的权限以及文件类型,记录在树对象中,这样就会知道每一个文件的权限了。

 

 

 

Git中运用了zlib库对文件进行压缩,使用sha-1对文件数据进行处理。

 

zlib库的使用:

https://blog.csdn.net/t146lla128xx0x/article/details/80429149

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WenCoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值