我正在学习Git,知道每个提交指向一个树形结构,而树形结构又指向相应的blob(s)。在执行git提交时,我可以看到提交ID被生成。但是如何找到与提交相关联的相应树哈希和blob(s)哈希呢?
谢谢您的回复。
我正在学习Git,知道每个提交指向一个树形结构,而树形结构又指向相应的blob(s)。在执行git提交时,我可以看到提交ID被生成。但是如何找到与提交相关联的相应树哈希和blob(s)哈希呢?
谢谢您的回复。
git cat-file -p
查看不同类型的对象。
git-cat-file-提供版本库对象的内容、类型和大小信息
...
-p
根据其类型对<object>
的内容进行漂亮打印。
以下是一个示例。
在我的版本库中,最上面的提交是这个:
❯ git lg -1
* 87ffcaa: (7 weeks ago) Updated all packages (HEAD -> develop, origin/develop)
| Lasse Vågsæther Karlsen <lasse@vkarlsen.no> (Tue, 16 Jun 2020 12:30:21 +0200)
❯ git cat-file -p 87ffcaa
tree dedfc8120583a89936cacf2e55c5db1d6d532129
parent def5a89a442d0ec88243a43ca9c9fef493dbf4c6
author Lasse Vågsæther Karlsen <lasse@vkarlsen.no> 1592303421 +0200
committer Lasse Vågsæther Karlsen <lasse@vkarlsen.no> 1592303421 +0200
Updated all packages
❯ git cat-file -p dedfc8120583a89936cacf2e55c5db1d6d532129
100644 blob 9a277a1791951e14c235243bcf374ee2d01e27b9 .editorconfig
100644 blob 1ff0c423042b46cb1d617b81efb715defbe8054d .gitattributes
100644 blob 304b515a2ae6795ef7c73c6f0d1e822fcefd66b3 .gitignore
040000 tree 74fd33ec96af2b083e9367448bd6f6786e8b4d47 ConsoleSandbox
100644 blob e47b11709137791b3c1241092b3d5215df834ad3 LICENSE
100644 blob 2f2aaad1b5662e3d3e33398c6ce29106d0fbdcac LVK.sln
100644 blob 9ec3d74ae05f906457f6a60ffa2df78a070ffabb LVK.sln.DotSettings
100644 blob a1f9a1de838feeec888ab34bf35a998ade9c3560 README.md
040000 tree 759ef337f68ec31f0ca035f9427f309e87765030 SolutionQualityAssuranceTests
...
如果我想查看其中一个实际的blob,比如那个LICENSE文件:
❯ git cat-file -p e47b11709137791b3c1241092b3d5215df834ad3
MIT License
Copyright (c) 2018 Lasse Vågsæther Karlsen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
...
040000 tree 408c62b058b6f4b14f65188d492ec452f0bb6e1d src
这是一个子文件夹。我可以通过相同的方式展示引用它的树形结构:
❯ git cat-file -p 408c62b058b6f4b14f65188d492ec452f0bb6e1d
100644 blob af6a33f6fe9f8f35d7d070fa16be01319df801bd Directory.Build.props
040000 tree 9a8adfce1ccb494689fd6710369c1f925fa8acbf LVK.AppCore.Console
040000 tree 4054753cad506b9a0132c72becd906b388bc8e59 LVK.AppCore.Windows.Forms
...
等等。
git log --graph --oneline --all
- 显示各种类型的对象(blobs、trees、tags 和 commits)
git show <object>
- 列出给定树对象的内容
git ls-tree <object>
- 查看提交对象的内容和类型(在您的例子中为 COMMIT)
git cat-file -p <SHA_OF_ COMMIT_OBJECT>
git rev-parse
。其名称提示了它的完整目的,作为用于扩展Git命令的完整选项和参数解析工具包。git revisions
,以了解您可以指定解析为Git标识符的所有方法。somecommit
指的是提交或标记,则somecommit:
引用(标记)提交的树,如同在检查中可能会错过基本:
的那些场合一样,somecommit^{tree}
也是如此。:
通常是“让我到达一个树”的语法(前导:
是“让我到达索引”)。git ls-tree
。例如,git ls-tree -rd @:
可以快速概述结构。git ls-files
,其中有很多方便的选项,它基本上是具有索引感知文件列表的瑞士军刀,或者可能只是我有点言过其实。somecommit:path/to/file
是该提交在该路径处列出的任何内容,则::path/to/file
是在该路径处列出的索引中的任何内容。还有更多,请参见该链接。somecommit:
命名了某个提交的树,因此git rev-parse somecommit:
将向您显示其ID;:path/to/file
命名该路径的索引条目,git rev-parse :path/to/file
将向您显示¹该条目中的内容ID。
git ls-tree
和git ls-files
?它们对于递归列表非常有用,例如git ls-tree -rd @:
是整个树形结构的良好概览。 - jthill