2011-08-19 25 views
6

Quiero escribir un módulo en python (Este es el proyecto de aprendizaje) para mejorar mi experiencia de git. ¿Hay un módulo de python para varios comandos de git? Al menos los básicos (commit/diff/log/add)?Git commit from python

Vi GitPython pero no pude encontrar el soporte para confirmaciones (nuevas); es más un framework de navegación de repo que una interfaz completa de GIT. (¿O me olvidé de algo?)

Además, si hay un módulo de python para todo esto, ¿será preferible o ejecutar los comandos del shell desde el código de Python?

Respuesta

10

En GitPython que create a commit from an index object.

En libgit2 usted create a commit from a repository object.

También puede ser que desee mirar a esta pregunta:

+1

+1 para libgit2. –

+0

Muchas gracias por el enlace "experiencia de git python". Puedo ser capaz de basar mi decisión en eso. – Sailesh

+0

Debe tener en cuenta que (debido a la fecha) esas respuestas no mencionan las vinculaciones de Python basadas en libgit2, que son interesantes porque la biblioteca libgit2 es una biblioteca reentrante para interactuar con los repositorios de git. Además, usar simplemente el módulo de subproceso para invocar comandos de git (como lo sugieren @Ferdinand Beyer) me ha funcionado en muchas secuencias de comandos y puede ser todo lo que necesita. –

9

Git está diseñado para constar de "fontanería" y "porcelana". Los componentes de fontanería forman la base del sistema de bajo nivel: administración de objetos, repositorios, controles remotos, etc. Porcelana, por otro lado, significa herramientas de alto nivel más amigables para el usuario que usan la plomería.

Históricamente, solo las partes más básicas/de rendimiento crítico (principalmente plomería) se implementaban en C, el resto usaba scripts de shell/perl. Para ser más portátil, se reescribió más y más código en C.

Con este antecedente, recomendaría simplemente usar las llamadas al sistema del ejecutable git para su envoltura de python. Considere su código como parte de la porcelana de Git. En comparación con el uso de una biblioteca especializada:

PRO

  • No es necesario aprender una API - usar los comandos git que están familiarizados con
  • Juego completo de herramientas - se puede utilizar porcelana y no están restringidos a la funcionalidad de bajo nivel

CONTRA

  • Necesidad de analizar la salida de línea de comandos de git llamadas.
  • podría ser más lenta