¿Cuáles son las experiencias de las personas con cualquiera de los módulos Git para Python? (Sé de GitPython, PyGit y Dulwich, siéntete libre de mencionar a otros si los conoces).
Estoy escribiendo un programa que tendrá que interactuar (agregar, eliminar, confirmar) con un repositorio de Git, pero no tengo experiencia con Git, por lo que una de las cosas que estoy buscando es la facilidad de uso / comprensión con respecto a Git.
Las otras cosas que me interesan principalmente son la madurez y la integridad de la biblioteca, la falta razonable de errores, el desarrollo continuo y la utilidad de la documentación y los desarrolladores.
Si piensa en otra cosa que tal vez quiera / necesite saber, no dude en mencionarlo.
Respuestas:
Si bien esta pregunta se hizo hace un tiempo y no conozco el estado de las bibliotecas en ese momento, vale la pena mencionar para los buscadores que GitPython hace un buen trabajo al abstraer las herramientas de línea de comandos para que no necesite usar subproceso Hay algunas abstracciones útiles incorporadas que puedes usar, pero para todo lo demás puedes hacer cosas como:
Todo lo demás en GitPython solo facilita la navegación. Estoy bastante satisfecho con esta biblioteca y aprecio que sea un contenedor de las herramientas git subyacentes.
ACTUALIZACIÓN : He cambiado a usar el módulo sh no solo para git sino para la mayoría de las utilidades de línea de comandos que necesito en python. Para replicar lo anterior, haría esto en su lugar:
fuente
repo.git.branch(b=somebranch)
funciona, perorepo.git.branch(D=somebranch)
no lo hace, ya que falta un espacio). Creo que yo mismo implementaré una función general basada en subprocesos. Estoy triste, tenía muchas esperanzas. : - /git = sh.git.bake(_cwd=repopath)
. Funciona increíblemente.Pensé que respondería a mi propia pregunta, ya que estoy tomando un camino diferente al sugerido en las respuestas. Sin embargo, gracias a quienes respondieron.
Primero, una breve sinopsis de mis experiencias con GitPython, PyGit y Dulwich:
Además, StGit parece interesante, pero necesitaría la funcionalidad extraída en un módulo separado y no quiero esperar a que eso suceda en este momento.
En (mucho) menos tiempo del que pasé tratando de hacer que los tres módulos anteriores funcionen, logré que los comandos git funcionen a través del módulo de subproceso, por ejemplo
Esto aún no está completamente incorporado a mi programa, pero no estoy anticipando un problema, excepto tal vez la velocidad (ya que a veces estaré procesando cientos o incluso miles de archivos).
Tal vez simplemente no tuve la paciencia para poner las cosas en marcha con Dulwich o GitPython. Dicho esto, espero que los módulos tengan más desarrollo y sean más útiles pronto.
fuente
Recomiendo pygit2 : utiliza los excelentes enlaces libgit2
fuente
pygit2
es una biblioteca realmente útil, ¡y espero que se expanda en el futuro!libgit
ypygit2
, tomando la fuente de GitHub. El problema es que las ramas principales tienen pruebas rotas y la última instalación "estable" falla ... No es una solución adecuada si la confiabilidad es importante y necesita implementar en una variedad de entornos ... :(Esta es una pregunta bastante antigua, y mientras buscaba bibliotecas de Git, encontré una que se hizo este año (2013) llamada Gittle .
Funcionó muy bien para mí (donde los otros que probé eran escamosos), y parece cubrir la mayoría de las acciones comunes.
Algunos ejemplos de README:
fuente
git add other1.txt other2.txt
para que no siga lo que se esperaría.Quizás ayude, pero Bazaar y Mercurial están usando dulwich para su interoperabilidad Git.
Dulwich es probablemente diferente al otro en el sentido de que es una reimplementación de git en python. El otro podría ser un envoltorio alrededor de los comandos de Git (por lo que podría ser más simple de usar desde un punto de vista de alto nivel: commit / add / delete), probablemente significa que su API está muy cerca de la línea de comandos de git, por lo que necesitará para ganar experiencia con Git.
fuente
En aras de la integridad, http://github.com/alex/pyvcs/ es una capa de abstracción para todos los dvcs. Utiliza dulwich, pero proporciona interoperabilidad con los otros dvcs.
fuente
Una respuesta actualizada que refleja los tiempos cambiados:
GitPython actualmente es el más fácil de usar. Admite la envoltura de muchos comandos de fontanería git y tiene una base de datos de objetos conectables (dulwich es uno de ellos), y si no se implementa un comando, proporciona una API fácil para desviarse a la línea de comando. Por ejemplo:
Esto llama:
Dulwich también es bueno pero de nivel mucho más bajo. Es un poco difícil de usar porque requiere operar con objetos de git a nivel de plomería y no tiene una buena porcelana que normalmente querría hacer. Sin embargo, si planea modificar alguna parte de git, o usa git-recibir-paquete y git-upload-pack, debe usar dulwich.
fuente
Aquí hay una implementación realmente rápida del "estado de git":
fuente
git status
git status --short
sería más fácil y creo--short
que es menos probable que cambie la salida.git status --porcelain
para esto--porcelain: Give the output in a stable, easy-to-parse format for scripts...
--z
lugar de--porcelain
. A diferencia--porcelain
,--z
no escapa a los nombres de archivo.La respuesta de PTBNL es bastante perfecta para mí. Hago un poco más para el usuario de Windows.
fuente
La parte de la biblioteca de interacción git de StGit es bastante buena. Sin embargo, no se desglosa como un paquete separado, pero si hay suficiente interés, estoy seguro de que se puede solucionar.
Tiene muy buenas abstracciones para representar commits, árboles, etc., y para crear nuevos commits y árboles.
fuente
Para el registro, ninguna de las bibliotecas de Git Python mencionadas parece contener un equivalente de "estado de git", que es realmente lo único que desearía, ya que tratar con el resto de los comandos de git a través de un subproceso es tan fácil.
fuente