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.
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:
- el resumen de confirmación
- nombre del autor
- correo electrónico del autor
- confirmar fecha y hora
- 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.
Esta entrada tiene 0 comentarios