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
还有 tree
。blob
是普通文件, tree
是文件夹,像这个 about
就是文件夹。第三列是 object name
,每一个 object name
都是 40 位的16进制的校验和字符串,然后最后一列就是他们的 path name
就是他们的文件名(相对于 working directory)。
接下来我们看这个 blob
。 blob 是 git 用来存储我们的文件数据。而这个 tree
包括了 blob
和其他的 tree
。 commit
这个object ,就把这个 tree
连接到这个项目里面。
我们大部分 porcelain 命令都会用到这三种对象:blob
, tree
, commit
,他们的关系如下图:
关于这三种对象,我们在 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 对象。