我阅读了Git Pro,并知道git将标头添加到目标文件中,TYPE LENGTH\0
例如:
header = "blob #{content.length}\0"
但我想知道git保留此标头的目的是什么?
的确,在几乎所有情况下,当您拥有SHA-1时,您都知道应该获得哪种对象:如果从分支引用开始,则应该提交;如果你开始一个提交与其tree
你必须得到一棵树; 如果您有一个树ID并读取了它的对象,则每个条目都有一个mode
,告诉您对象的类型。
但是,如果您有标签参考呢?如果阅读.git/refs/tags/v2.2.2
并得到da5eda36576c1d45a52f7f60a9e5372aa4e2bb58
,您希望为对象找到哪种类型da5eda36576c1d45a52f7f60a9e5372aa4e2bb58
?
如果v2.2.2
是轻量级标记,da5eda36576c1d45a52f7f60a9e5372aa4e2bb58
则可能是一个提交,但它可能是一棵树,甚至是一个blob。如果是带注释的标签,da5eda36576c1d45a52f7f60a9e5372aa4e2bb58
将是标签对象。
您可以读取目标对象并进行猜测,但是如果它是blob对象,则它看起来可能像是有效的带注释的标记,提交或树。唯一确定的方法是读取对象类型。
除了上述内容,还git cat-file -t
告诉您类型,它只能从基础对象中找到。当然,如果git的设计不同有可能不会是一个git cat-file -t
。但是标签尤其需要这种类型,并且一旦存在,通过git cat-file -t
合理的方式公开它也是可行的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句