Saltear al contenido principal

Primeros pasos con GitPython – Lenguaje Python

GitPython es una biblioteca de código Python para leer y escribir programáticamente en repositorios de control de código fuente Git.

Contrata a un experto en Python para iniciar tu proyecto hoy mismo:

Aprendamos a usar GitPython instalándolo rápidamente y leyendo desde un repositorio de Git clonado local.

Nuestras herramientas

Este tutorial debería funcionar con Python 2.7 o 3, pero Python 3, especialmente 3.6+, se recomienda encarecidamente para todas las aplicaciones nuevas. solía
Python 3.6.3 para escribir esta publicación. Además de Python, a lo largo de este tutorial también usaremos las siguientes dependencias de la aplicación:

Eche un vistazo a esta guía para configurar Python 3 y Flask en Ubuntu 16.04 LTS si necesita instrucciones específicas para configurar un entorno de desarrollo de Python base.

Todo el código en esta publicación de blog está disponible en código abierto bajo la licencia MIT en GitHub bajo la
directorio first-steps-gitpython del repositorio blog-code-examples. Utilice y abuse del código fuente como desee para sus propias aplicaciones.

Instalar GitPython

Empiece por crear un nuevo entorno virtual para su proyecto. Mi virtualenv se llama testgit pero puede nombrar el suyo como corresponda al proyecto que está creando.

Active el virtualenv recién creado.

source gitpy/bin/activate

El nombre del virtualenv se antepondrá al símbolo del sistema después de la activación.

Crea y activa el entorno virtual de Python.

Ahora que el virutalenv está activado podemos usar el pip comando para instalar GitPython.

pip install gitpython==2.1.7

Ejecutar el pip y después de que todo esté instalado, debería ver un resultado similar al siguiente mensaje «Se instaló correctamente».

(gitpy) $ pip install gitpython==2.1.7
Collecting gitpython==2.1.7
  Downloading GitPython-2.1.7-py2.py3-none-any.whl (446kB)
    100% |████████████████████████████████| 450kB 651kB/s 
Collecting gitdb2>=2.0.0 (from gitpython==2.1.7)
  Downloading gitdb2-2.0.3-py2.py3-none-any.whl (63kB)
    100% |████████████████████████████████| 71kB 947kB/s 
Collecting smmap2>=2.0.0 (from gitdb2>=2.0.0->gitpython==2.1.7)
  Downloading smmap2-2.0.3-py2.py3-none-any.whl
Installing collected packages: smmap2, gitdb2, gitpython
Successfully installed gitdb2-2.0.3 gitpython-2.1.7 smmap2-2.0.3

A continuación, podemos comenzar a interactuar mediante programación con los repositorios de Git en nuestras aplicaciones Python con GitPython instalado.

Repositorio de clonación

GitPython puede funcionar con repositorios remotos, pero para simplificar este tutorial usaremos un repositorio clonado en nuestro sistema local.

Clona un repositorio con el que quieras trabajar en tu sistema local. Si no tiene uno específico en mente, use el
repositorio de código abierto Mundo Python Python Git que está alojado en GitHub.

Tome nota de la ubicación donde clonó el repositorio porque necesitamos la ruta para decirle a GitPython qué repositorio debe manejar. Cambie al directorio del nuevo repositorio de Git con cd luego ejecuta el pwd (directorio de trabajo actual) para obtener la ruta completa.

Verás algunos resultados como /Users/matt/devel/py/fsp. Esta ruta es su ruta absoluta a la base del repositorio de Git.

Utilizar el export comando para establecer una variable de entorno para la ruta absoluta al repositorio de Git.

export GIT_REPO_PATH='/Users/matt/devel/py/fsp' # make sure this your own path

Nuestro repositorio de Git y la variable de entorno de ruta están configurados, así que vamos a escribir el código Python que usa GitPython.

Leer repositorio y confirmar datos

Crea un nuevo archivo de Python llamado read_repo.py y abrirlo para que podamos empezar a codificar un script simple.

Comience con un par de importaciones y una constante:

import os
from git import Repo


COMMITS_TO_PRINT = 5

los os El módulo facilita la lectura de variables de entorno, como nuestro
GIT_REPO_PATH variable que establecimos anteriormente. from git import Repo le da a nuestra aplicación acceso a la biblioteca GitPython cuando creamos el Repo objeto.
COMMITS_TO_PRINT es una constante que limita el número de líneas de salida en función de la cantidad de confirmaciones en las que queremos que nuestro script imprima información. Mundo Python Python tiene más de 2250 confirmaciones, por lo que habría una gran cantidad de resultados si imprimiéramos cada confirmación.

Siguiente dentro de nuestro read_repo.py file crea una función para imprimir información de confirmación individual:

def print_commit(commit):
    print('----')
    print(str(commit.hexsha))
    print(""{}" by {} ({})".format(commit.summary,
                                     commit.author.name,
                                     commit.author.email))
    print(str(commit.authored_datetime))
    print(str("count: {} and size: {}".format(commit.count(),
                                              commit.size)))

los print_commit La función toma un objeto de confirmación de GitPython e imprime el hash SHA-1 de 40 caracteres para la confirmación seguido de:

  1. el resumen de confirmación
  2. nombre del autor
  3. correo electrónico del autor
  4. confirmar fecha y hora
  5. contar y actualizar el tamaño

Bajo el print_commit función, cree otra función llamada
print_repository para imprimir detalles del Repo objeto:

def print_repository(repo):
    print('Repo description: {}'.format(repo.description))
    print('Repo active branch is {}'.format(repo.active_branch))
    for remote in repo.remotes:
        print('Remote named "{}" with URL "{}"'.format(remote, remote.url))
    print('Last commit for repo is {}.'.format(str(repo.head.commit.hexsha)))

print_repository es parecido a print_commit pero en su lugar imprime la descripción del repositorio, la rama activa, todas las URL de Git remotas configuradas para este repositorio y la última confirmación.

Finalmente, necesitamos una función «principal» para cuando invocamos el script desde la terminal usando el python mando. Completa nuestro

if __name__ == "__main__":
    repo_path = os.getenv('GIT_REPO_PATH')
    # Repo object used to programmatically interact with Git repositories
    repo = Repo(repo_path)
    # check that the repository loaded correctly
    if not repo.bare:
        print('Repo at {} successfully loaded.'.format(repo_path))
        print_repository(repo)
        # create list of commits then print some of them to stdout
        commits = list(repo.iter_commits('master'))[:COMMITS_TO_PRINT]
        for commit in commits:
            print_commit(commit)
            pass
    else:
        print('Could not load repository at {} :('.format(repo_path))

La función principal se encarga de agarrar el GIT_REPO_PATH variable de entorno y crea un objeto Repo basado en la ruta si es posible.

Si el repositorio no está vacío, lo que indica un error al encontrar el repositorio, entonces el print_repository y print_commit Las funciones se llaman para mostrar los datos del repositorio.

Si desea copiar y pegar todo el código que se encuentra arriba a la vez, eche un vistazo a la read_repo.py archivo en GitHub.

Es hora de probar nuestro script que usa GitPython. Invocar el read_repo.py archivo usando el siguiente comando.

(gitpy) $ python read_repo.py

Si el virtualenv está activado y el GIT_REPO_PATH La variable de entorno está configurada correctamente, deberíamos ver una salida similar a la siguiente.

Repo at ~/devel/py/fsp/ successfully loaded.
Repo description: Unnamed repository; edit this file 'description' to name the repository.
Repo active branch is master
Remote named "origin" with URL "[email protected]:mattmakai/fullstackpython.com"
Last commit for repo is 1fa2de70aeb2ea64315f69991ccada51afac1ced.
----
1fa2de70aeb2ea64315f69991ccada51afac1ced
"update latest blog post with code" by Matt Makai ([email protected])
2017-11-30 17:15:14-05:00
count: 2256 and size: 254
----
1b026e4268d3ee1bd55f1979e9c397ca99bb5864
"new blog post, just needs completed code section" by Matt Makai ([email protected])
2017-11-30 09:00:06-05:00
count: 2255 and size: 269
----
2136d845de6f332505c3df38efcfd4c7d84a45e2
"change previous email newsletters list style" by Matt Makai ([email protected])
2017-11-20 11:44:13-05:00
count: 2254 and size: 265
----
9df077a50027d9314edba7e4cbff6bb05c433257
"ensure picture sizes are reasonable" by Matt Makai ([email protected])
2017-11-14 13:29:39-05:00
count: 2253 and size: 256
----
3f6458c80b15f58a6e6c85a46d06ade72242c572
"add databases logos to relational databases pagem" by Matt Makai ([email protected])
2017-11-14 13:28:02-05:00
count: 2252 and size: 270

Las confirmaciones específicas que ve variarán en función de las últimas 5 confirmaciones que envié al repositorio de GitHub, pero si ve algo como el resultado anterior, es una buena señal de que todo funcionó como se esperaba.

¿Que sigue?

Acabamos de clonar un repositorio de Git y usamos la biblioteca GitPython para leer una gran cantidad de datos sobre el repositorio y todas sus confirmaciones.

Sin embargo, GitPython puede hacer más que solo leer datos, ¡también puede crear y escribir en repositorios de Git! Eche un vistazo a modificando referencias
página de documentación en el tutorial oficial de GitPython o vuelva aquí en el futuro cuando tenga la oportunidad de escribir un tutorial de GitPython más avanzado.

¿Necesitas ayuda para revisar el código de tu proyecto?



Esta entrada tiene 0 comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Volver arriba