我正在使用带有裸存储库的 GitPython,并且试图通过其 SHA 获取特定的 git 对象。如果我直接使用 git,我会这样做
git ls-tree sha_of_tree
git show sha_of_blob
由于我使用的是 GitPython,并且我想获得一棵特定的树,因此我执行以下操作:
repo = Repo("path_to_my_repo")
repo.tree("b466a6098a0287ac568ef0ad783ae2c35d86362b")
把这个拿回来
<git.Tree "b466a6098a0287ac568ef0ad783ae2c35d86362b">
现在我有一个树对象,但我无法访问它的属性,如路径、名称、blob 等。
repo.tree("b466a6098a0287ac568ef0ad783ae2c35d86362b").path
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\Python27\lib\site-packages\gitdb\util.py", line 238, in __getattr__
self._set_cache_(attr)
File "c:\Python27\lib\site-packages\git\objects\tree.py", line 147, in _set_cache_
super(Tree, self)._set_cache_(attr)
File "c:\Python27\lib\site-packages\git\objects\base.py", line 157, in _set_cache_
raise AttributeError( "path and mode attributes must have been set during %s object creation" % type(self).__name__ )
AttributeError: path and mode attributes must have been set during Tree object creation
但是如果我输入以下内容,它会起作用
repo.tree().trees[0].path
我的问题的另一部分是如何使用 GitPython 获取 blob 对象。我注意到唯一的对象树有属性 blob,所以为了通过 SHA 获取 blob,我必须 (a) 首先知道它属于哪个树,(b) 找到这个 blob,然后 (c) 调用data_stream
方法。我可以做
repo.git.execute("git show blob_sha")
但我想首先知道这是做到这一点的唯一方法。