Как я могу получить удаленный репозиторий с помощью GitPython?

Я пытаюсь найти способ получить репозиторий git с помощью gitPython. Пока это то, что я взял из официальных документов здесь .

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()

Дело в том, что я хочу получить доступ к repo.remotes.origin, чтобы сделать тягу без переименования его происхождения (origin.rename). Как я могу этого добиться? Спасибо.


person Uuid    schedule 31.10.2012    source источник


Ответы (4)


Мне удалось это, получив имя репо напрямую:

 repo = git.Repo('repo_name')
 o = repo.remotes.origin
 o.pull()
person Uuid    schedule 31.10.2012
comment
repo_name здесь на самом деле не имя репо, а путь файловой системы к базе репозитория git. - person Paul Tobias; 24.11.2017
comment
git.Repo(repo_dir).remotes[remote].pull() если ваш пульт представляет собой строку - person crizCraig; 03.01.2019
comment
git.Repo(repo_dir).remotes.origin.pull(options), где, например, options='--tags' - person Gulzar; 13.08.2019
comment
repo = git.Repo(localpath_to_repo_dir) repo.remotes.origin.pull(branch_name) если вы хотите тянуть из ветки по имени - person otaku; 04.08.2020
comment
Как заставить тянуть с помощью этого метода? - person Mike; 01.10.2020

Надеюсь, вы ищете это:

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

Извлекает последние коммиты для данного репозитория и ветки.

person Akhil Singhal    schedule 08.02.2018
comment
Работай на меня :) Спасибо! - person HolyM; 23.10.2019
comment
Спасибо! Это также работает, если вы хотите получить прямо из URL-адреса. - person Daniel Lavedonio de Lima; 01.07.2020

Как говорится в принятом ответе, можно использовать repo.remotes.origin.pull(), но недостатком является то, что он скрывает настоящие сообщения об ошибках в своих собственных общих ошибках. Например, если разрешение DNS не работает, repo.remotes.origin.pull() показывает следующее сообщение об ошибке:

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

С другой стороны, использование команд git с GitPython, например repo.git.pull() показывает реальную ошибку:

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.'
person Paul Tobias    schedule 24.11.2017

Модуль git.Git из ответа Ахила Сингхала выше по-прежнему работает, но был переименован в git.cmd.Git, например:

import git 
# pull from remote origin to the current working dir:
git.cmd.Git().pull('https://github.com/User/repo','master')
person Александр    schedule 22.09.2020