GitPython y envío de commands al object Git

GitPython es una forma de interactuar con git de python. Estoy intentando acceder a los commands básicos de git (por ejemplo, git commit -m "message" ) desde este module, que de acuerdo con esto se debe acceder a través del module Git. Esto es lo que he intentado hasta ahora para que estos commands funcionen:

 >>> import git >>> foo = git.Git("~/git/GitPython") >>> bar = "git commit -m 'message'" >>> beef = git.Git.execute(foo,bar) 

Esto muestra un error que dice que no hay tal file o directory. También he intentado lo siguiente como routes a mi directory git:

~/git/GitPython/.git
/Users/bacon/git/gitclient/

La única otra opción es que el command es incorrecto, así que lo intenté: commit -m "message" también, y todavía recibo "no tal file o directory".

¿Qué debo hacer para que estos commands git funcionen correctamente?

No he intentado verificarlo todavía, pero parece que git.Git.execute espera una list de arguments de command-line (si le das una cadena, searchá un ejecutable que coincida exactamente con la cadena, los espacios y todo, lo que naturalmente no haría) se puede encontrar), entonces algo como esto creo que funcionaría:

 import git import os, os.path g = git.Git(os.path.expanduser("~/git/GitPython")) result = g.execute(["git", "commit", "-m", "'message'"]) 

otros cambios:

  • Supongo que usar una ruta con ~ in no funcionaría, así que usé os.path.expanduser para expandir ~ a su directory de inicio
  • usar instance.method (* args) en lugar de Class.method (instance, * args) es generalmente preferido, así que lo cambié, aunque aún funcionaría con el otro sentido

Sin embargo, podría haber forms más sanas que ejecutar manualmente el command de confirmación (simplemente no noté ninguna búsqueda rápida de la fuente), así que sugiero asegurarme de que no haya un path de mayor nivel antes de hacerlo de esa manera.

En el tutorial dice …

 The first step is to create a ``Repo`` object to represent your repository. >>> from git import * >>> repo = Repo("/Users/mtrier/Development/git-python") 

No veo tu Repo.

Estoy mirando el file llamado tutorial.rst en el directory doc de GitPython.

En general, ~ su shell realiza la expansión y no es una característica del sistema de files, por lo que no debe esperar que funcione.

os.path.expanduser puede aplicarle la expansión, pero en general es mejor que escriba la ruta completa (desde entonces, la secuencia de commands funciona para quien la ejecuta, siempre que tenga acceso a sus files).

Sospecho que quieres:

 '/Users/bacon/git/GitPython'