$ mkdir c $ cd c $ git init
//首次提交。
$ vim 1.txt $ ls -alh .git/objects/ total 4.0K drwxr-xr-x 1 desktop 197121 0 八月 8 17:00 ./ drwxr-xr-x 1 desktop 197121 0 八月 8 17:00 ../ drwxr-xr-x 1 desktop 197121 0 八月 8 17:00 info/ drwxr-xr-x 1 desktop 197121 0 八月 8 17:00 pack/ $ git add 1.txt $ git commit -m ‘.‘ $ ls -alh .git/objects/ total 4.0K drwxr-xr-x 1 desktop 197121 0 八月 8 17:01 ./ drwxr-xr-x 1 desktop 197121 0 八月 8 17:01 ../ drwxr-xr-x 1 desktop 197121 0 八月 8 17:01 38/ drwxr-xr-x 1 desktop 197121 0 八月 8 17:01 81/ drwxr-xr-x 1 desktop 197121 0 八月 8 17:01 d0/ drwxr-xr-x 1 desktop 197121 0 八月 8 17:00 info/ drwxr-xr-x 1 desktop 197121 0 八月 8 17:00 pack/ $ find .git/objects/ -type f .git/objects/38/fd29697b220f7e4ca15b044c3222eefe5afdc1 .git/objects/81/95bd571d304adf2632377d6dabc5880cfbdf36 .git/objects/d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d $ git cat-file -t 38fd tree $ git cat-file -t 8195 commit $ git cat-file -t d004 blob $ git show d004 1
//再次提交。
$ vim 1.txt $ git add 1.txt $ git commit -m ‘.‘ $ find .git/objects/ -type f .git/objects/11/91247b6d9a206f6ba3d8ac79e26d041dd86941 .git/objects/38/fd29697b220f7e4ca15b044c3222eefe5afdc1 .git/objects/4d/1356c6ae08b43a14779807b6be98554dce7d3c .git/objects/54/57b3462c78fd6d7590a15ad3be446a4fb5d1fd .git/objects/81/95bd571d304adf2632377d6dabc5880cfbdf36 .git/objects/d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d $ git cat-file -t 1191 blob $ git cat-file -t 4d13 commit $ git cat-file -t 5457 tree $ git show 1191 1 2
//显然,每次提交,每个文件都增加一组(commit/tree/blob)。
//查看commit、tree、blob。
$ git show -s --pretty=raw 4d13 commit 4d1356c6ae08b43a14779807b6be98554dce7d3c tree 5457b3462c78fd6d7590a15ad3be446a4fb5d1fd parent 8195bd571d304adf2632377d6dabc5880cfbdf36 author yourname <[email protected]> 1533719156 +0800 committer yourname <[email protected]> 1533719156 +0800 $ git ls-tree 5457 100644 blob 1191247b6d9a206f6ba3d8ac79e26d041dd86941 1.txt $ git show 1191 1 2
//tree格式:权限 节点类型 hash 节点名称。
//commit后如果是稳定版本通常添加tag。
//git tag tagname //轻量 tag,不占对象。即.git/objects/不会增加数量。
//git tag -a tagname -m ‘note‘ //附注 tag,占对象。
//git tag tagname 4d13 //git tag tagname hash-object 为目标 commit 设置 tag。
//结论:
//commit,可以定位tree。
//tree,类似目录,可以定位其下所有tree和blob。
//blob,指向文件数据,不带名称。
//tag,指向commit。
原文地址:https://www.cnblogs.com/dailycode/p/9444302.html
时间: 2024-10-08 12:16:48