1.4. 审视 Tree

未匹配的标注

接下来我们看怎么去审视这个 tree 。也是用同一个命令git cat-file。刚才这个 tree 前面这个 ID 我们直接拿来用,随便复制前几位只要保证它的 唯一性 就可以了。

➜  plumbing-demo git:(main) git cat-file tree 69d1223f
100644 .gitignore�;��%��O�L���(���40000 about��˪<0�&�H,�cQ��v100644 blue.html�{���ez��
�++�CH`�100644 green.html�.,�
                             �i�r��9A6Ud�100644 index.html�B��z⯢>��
                                                                   To"�d100644 news-1.html�]o=�5U���r�e���-��100644 news-2.htmlB�}��\���R��
                                                                                                                                           �bs10i31���n\100644 orange.html���Hn��Af��;�#��M�100644 pink.html�[b��k����*X�T�O100644 rainbow.html)
>0�}�;�-�!�100644 red.htmlp���e�D�(y����100644 style.css�n3S���1f�I-��ʅ=�100644 yellow.html��x�I�A�C��J)51�8�%

好,现在看一下。现在它就是包括了二进制的这个文件,看起来非常的丑。 因此 Git 提供了另一个有用的 plumbing 命令. 就是 git ls-tree 就是专门用来展示这个 tree 的。

➜  plumbing-demo git:(main) git ls-tree 69d1223f
100644 blob 8b3b8411eb86258efd4fe44ca0e6b3e428aa9be6    .gitignore
040000 tree f91ea5cbaa3c1c30c226f2a1482cbd63518daf76    about
100644 blob cf7bb0e4e09d657a84fb0abb2b2bca434860df1c    blue.html
100644 blob 822e2cb2140bba69f4bd72fac43941360f5564f6    green.html
100644 blob 8f42afe8901a7ae2afa2103e9e940b546f22ae64    index.html
100644 blob d85d6f3da33555e10584e172ae65dae1f92db68f    news-1.html
100644 blob 42f208c97da2ac5ce2e3d952c41aa90b96026273    news-2.html
100644 blob 644acb81b164fe4a8a73910d6933318c8ff96e5c    news-3.html
100644 blob 9bbddb486e8dc04166fad51c3bf523a3d6114df3    orange.html
100644 blob 835b166283ef6b88dddbe92a581dcd541bacbb4f    pink.html
100644 blob 290aa9d00d3e30847dee0f3b90042d1f9a0721a1    rainbow.html
100644 blob 70ce141cd1e36585441e1f8e2879f7ade6fa87fa    red.html
100644 blob cb6e3353a97fa8fa316616ba492dd4c5ca853d9f    style.css
100644 blob e9d1781fd949fd41d2439ae3824a293531bc38a5    yellow.html

这个时候就可以看到它把这个 tree 的内容像一个文件夹一样的展示出来了。

第一列是文件模式,第二列是文件类型,你可以看到 blob 还有 treeblob 是普通文件, tree 是文件夹,像这个 about 就是文件夹。第三列是 object name ,每一个 object name 都是 40 位的16进制的校验和字符串,然后最后一列就是他们的 path name 就是他们的文件名(相对于 working directory)。

接下来我们看这个 blob。 blob 是 git 用来存储我们的文件数据。而这个 tree 包括了 blob 和其他的 treecommit 这个object ,就把这个 tree 连接到这个项目里面。

我们大部分 porcelain 命令都会用到这三种对象:blob, tree, commit,他们的关系如下图:

Commit, tree, and blob objects

关于这三种对象,我们在 github 的URL中经常看到。比如:
https://github.com/jedisct1/libsodium/tree/master/src 就表示是 master 分支的 src 文件夹(tree 对象)。
https://github.com/jedisct1/libsodium/blob/master/src/Makefile.am 就表示 master 分支的 src 文件夹中的 Makefile.am文件(blog 对象)。
https://github.com/jedisct1/libsodium/commit/3a99e1ec8a673928ea83657143a522dabacf3898 就表示是 SHA-1 为 3a99e1ec8a673928ea83657143a522dabacf3898 的 commit 对象。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~