Git

Automatización de Git con Python por @ycumberbirch

Ultimamente, he descubierto que python tiene librerías para todo. Desde las tareas más comunes en el mundo del desarrollo a las más descabelladas, siempre hay una librería de python disponible para ello.

Desk-Drawer-Before_opt

Da igual lo que busques, seguro que ¡aquí lo encuentras!

There’s a library for that! GitPython

Mi más reciente descubrimiento se llama GitPython. Es una librería para poder realizar, como su nombre indica, llamadas a git desde dentro de python. Y cuando digo llamadas a git, no solo llamadas simples y típicas de git, sino todas las llamadas que se te ocurran. Desde hacer un add de un fichero editado, hasta ver el reflog para descubrir donde se quedo cierto cambio, si quieres hacerlo, aquí tienes la posibilidad.

Lógicamente, te puedes plantear cuantas de estas herramientas son útiles para poder manejar desde un programa. Git es una herramienta con la cual tienes que interaccionar como persona, para poder procesar la salida de log, status y reflog, y ver que tienes que hacer con dicha información. La idea de ejecutar reflog y reset desde un programa me resulta bastante inútil. Cierto es que podrías saber que mensaje de commit utilizaste en el punto al que quieres volver, pero , a mi gusto, no es una tarea automatizable hasta el punto de poder desear un programa que te realize dicha acción.

Las posibilidades que ofrece esta herramienta las veo , por una parte, orientadas al registro del estado de git en ciertos momentos, y por otra, muy potentes cuando se combinan con otras herramientas ofrecidas por python. Se nos abre la posibilidad de, con la ejecución de un programa, enviarle el log de tu repositorio de git a tu colaborador que no tiene plenos accesos a dicho repositorio, o generar un zip con el contenido de un tag en concreto con el objetivo guardar dicha versión para alguna futura referencia o envío. Otra utilidad que le veo a dicha herramienta es la realización de addscommits periódicos para realizar un guardado cada cierto tiempo y así protegernos de desarrolladores despistados que se olvidan del commit en el momento menos apropiado, que seguro que todos conocemos alguno.

Ahora bien, si te pones el disfraz de científico loco y le echas imaginación, puedes hacer mucho más:

  • Crear tu propio gitHub usando GitPython y Django.
  • Usar git como capa de persistencia (¡con versiones!) para un proyecto en Python
  • Crear un “wrapper” que implementa un workflow específico de git

¡El límite lo pone tu nivel de frikismo!

¡Se me ha ocurrido una idea genial para automatizar git en la Raspberry Pi que tengo en el baño!

¡Se me ha ocurrido una idea genial para automatizar git en la Raspberry Pi que tengo en el baño!

Instalación de GitPython mediante PIP

Para utilizar esta librería, lo primero que tienes que hacer es instalarla. Utilizando pip, es así de sencillo:

Tras esto, importas el módulo en tu programa y tienes vía libre. Puedes inicializar tu repositorio indicando la ruta al directorio, o si está en un repositorio remoto, realizando el clone necesario:

En las variables repoLocal y repoCloned tenemos una instancia del repositorio, para poder acceder a las funcionalidades de git de dichos repositorios. Para acceder a ellos, procedemos de la siguiente forma:

Viendo la salida del log, vemos que se ha añadido el fichero deseado al repositorio. En mi caso, he obtenido lo siguiente:

Con el mismo procedimiento, podemos ver los branches o tags, hacer checkout a cualquiera de ellos y ver su contenido.

Como ya comenté, eso de hacer adds y commits de cosas concretas mediante un programa me resulta poco útil dada su poca reusabilidad, pero la idea de hacer un zip con el contenido de cada tag de todos los repositorios que tenemos… eso es otra cuestión. Ahora bien, las frikadas que puedes perpetrar con un poco de imaginación, son épicas. Lo único que te hace falta son ganas de investigar un poco en python, y la realización de ese tipo de tareas horribles y repetitivas las podrás terminar en nada de tiempo.

Lógicamente, me queda mucho por explorar de esta herramienta, pero su potencial en temas de hacer backups y automatizar ciertas tareas que implican un uso de git que, a mano, puede llevar horas, me resulta inmenso.

 

Acerca de Yazmin Cumberbirch

Estudiante de Ing. Telecomunicaciones e Ing. Técnica de Informática de Sistemas en la Universidad Rey Juan Carlos. Allí me toca desarrollar de todo un poco, pero lo que realmente me gusta es el desarrollo móvil y web. Aparte del mundo geek, me gusta la fotografía, la música y viajar.

Share this:

Leave a comment