Estoy usando GitPython con un repositorio simple y estoy tratando de obtener un objeto git específico por su sha. Si usara git directamente, sólo quiero hacer estoGitPython obtén el objeto tree y blob por sha
git ls-tree sha_of_tree
git show sha_of_blob
Desde que estoy usando GitPython y quiero conseguir árbol específico, hago lo siguiente.
repo = Repo("path_to_my_repo")
repo.tree("b466a6098a0287ac568ef0ad783ae2c35d86362b")
Y conseguir esto de vuelta
<git.Tree "b466a6098a0287ac568ef0ad783ae2c35d86362b">
ahora tengo un objeto del árbol, pero no puedo acceder a sus atributos como la ruta, el nombre, manchas, etc.
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
Pero si el tipo de la siguiente funciona
repo.tree().trees[0].path
el otro Parte de mi pregunta es cómo obtener el objeto blob con GitPython. Noté que solo el árbol de objetos tiene blobs de atributos, así que para obtener blob por sha, primero tengo que saber a qué árbol pertenece, encontrar este blob y luego llamar al método data_stream. tan sólo pudiera hacer
repo.git.execute("git show blob_sha")
pero me gustaría saber en primer lugar que esta es la única manera de hacer esto.
Por favor, añadir un poco más de explicación de su código. Las respuestas de solo código no son muy útiles. Gracias. –