GitPython получает объект дерева и большого двоичного объекта с помощью sha

Я использую GitPython с голым репозиторием и пытаюсь получить конкретный объект git по его SHA.Если бы я использовал 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">

Теперь у меня есть объект дерева , но я не могу получить доступ к его атрибутам, таким как путь, имя, большие двоичные объекты и т. д.

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. Я заметил, что единственное дерево объектов имеет большие двоичные объекты атрибутов, поэтому, чтобы получить большой двоичный объект с помощью SHA, я должен (а) сначала узнать, какому дереву оно принадлежит, (б) найти этот большой двоичный объект, а затем (в) вызвать метод data_stream. Я мог бы просто сделать

repo.git.execute("git show blob_sha")

, но сначала хотел бы знать, что это единственный способ сделать это.

7
задан Michael 17 October 2018 в 14:56
поделиться