第一次用git的时候就非常好奇,不知道这么多命令背后功能是怎么实现的。
后来在github上找到源码,回退到第一个初始节点,发现只有几个基本的.c文件,虽然不是完成的功能,但是一些基本的实现原理和逻辑还是挺清楚的。
比如对源文件内容的压缩、取hash值、压缩数据存入hash值命名的文件、tree、commit作用等等。
现在对这几个.c文件代码做简单梳理,主要用于了解功能实现的逻辑,如有错误,恳请指正,谢谢。
https://github.com/git/git.git
commit: e83c5163316f89bfbde7d9ab23ca2e25604af290
init-db.c 作用类似于以后的git init命令
在.dircache/objects目录下面创建00~ff共256个子目录
1. mkdir(".dircache", 0700); # 创建.dircache目录
2. mkdir(sha1_dir, 0700); # 创建.dircache/objects目录
3. mkdir(path, 0700); # 创建.dircache/objects/00~ff共256个目录
int main(int argc, char **argv)
{
mkdir(".dircache", 0700);
sha1_dir = DEFAULT_DB_ENVIRONMENT; // make dir .dircache/objects
mkdir(sha1_dir, 0700);
for (i = 0; i < 256; i++)
sprintf(path+len, "/%02x", i); // make dir format ".dircache/objects/00~ff"
mkdir(path, 0700);
}