¿Cómo puedo extraer un repositorio remoto con GitPython?

2 minutos de lectura

avatar de usuario
ID de usuario

Estoy tratando de encontrar la manera de extraer un repositorio de git usando gitPython. Hasta ahora, esto es lo que he tomado de los documentos oficiales. aquí.

test_remote = repo.create_remote('test', 'git@server:repo.git')
repo.delete_remote(test_remote) # create and delete remotes
origin = repo.remotes.origin    # get default remote by name
origin.refs                     # local remote references
o = origin.rename('new_origin') # rename remotes
o.fetch()                       # fetch, pull and push from and to the remote
o.pull()
o.push()

El hecho es que quiero acceder a repo.remotes.origin para hacer un pull sin renombrar su origen (origin.rename) ¿Cómo puedo lograr esto? Gracias.

avatar de usuario
ID de usuario

Logré esto obteniendo el nombre del repositorio directamente:

 repo = git.Repo('repo_path')
 o = repo.remotes.origin
 o.pull()

  • los repo_name aquí no está realmente el nombre del repositorio, sino la ruta del sistema de archivos a la base del repositorio de git.

    – Pablo Tobías

    24 de noviembre de 2017 a las 9:04

  • git.Repo(repo_dir).remotes[remote].pull() si tu control remoto es una cadena

    – crizCraig

    2 de enero de 2019 a las 22:03

  • git.Repo(repo_dir).remotes.origin.pull(options)donde, por ejemplo options='--tags'

    – Gulzar

    13 de agosto de 2019 a las 12:21

  • repo = git.Repo(localpath_to_repo_dir) repo.remotes.origin.pull(branch_name) si quieres tirar de una rama por nombre

    – otaku

    4 de agosto de 2020 a las 6:06


  • ¿Cómo forzar la tracción usando este método?

    – Miguel

    1 oct 2020 a las 16:42

Espero que estés buscando esto:

import git
g = git.Git('git-repo')
g.pull('origin','branch-name')

Extrae las últimas confirmaciones para el repositorio y la rama dados.

  • Trabaja para mí 🙂 ¡Gracias!

    – Santo M

    23 de octubre de 2019 a las 14:09

  • ¡Gracias! Esto también funciona si desea extraer directamente de una URL

    –Daniel Lavedonio de Lima

    1 de julio de 2020 a las 0:27

Como dice la respuesta aceptada, es posible usar repo.remotes.origin.pull(), pero el inconveniente es que oculta los mensajes de error reales en sus propios errores genéricos. Por ejemplo, cuando la resolución de DNS no funciona, entonces repo.remotes.origin.pull() muestra el siguiente mensaje de error:

git.exc.GitCommandError: 'Error when fetching: fatal: Could not read from remote repository.
' returned with exit code 2

Por otra parte usando comandos git con GitPython me gusta repo.git.pull() muestra el error real:

git.exc.GitCommandError: 'git pull' returned with exit code 1
stderr: 'ssh: Could not resolve hostname github.com: Name or service not known
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.'

avatar de usuario
Александр

El módulo git.Git de la respuesta anterior de Akhil Singhal todavía funciona, pero ha sido renombrado a git.cmd.Gitp.ej:

import git 
# pull from remote origin to the current working dir:
git.cmd.Git().pull('https://github.com/User/repo','master')

¿Ha sido útil esta solución?