Как я могу использовать gitpython для запуска «git pull alias_name master», где alias_name — это настраиваемый псевдоним?

Я относительно новичок в Python и пытаюсь использовать GitPython для переноса изменений из удаленного репозитория в его локальный аналог, который уже был клонирован.

Вне сценария запуск «git pull alias_name master» (где alias_name — это настраиваемый псевдоним) непосредственно из терминала работает каждый раз. Я проверяю, что локальное репо действительно обновляется, сравнивая SHA фиксации между локальным экземпляром репо и удаленным экземпляром.

cd path/to/local/instance/of/repo
git pull alias_name master
git log --pretty=format:'%h' -n 1

Если то, что возвращается выше, соответствует SHA фиксации для веб-интерфейса удаленного репо, я знаю, что локальное репо вытащило последние изменения. Каждый раз, когда я запускаю это с терминала, SHA совпадают, и я вижу, как отладчик вытаскивает последние изменения.

При выполнении следующего скрипт выполняется без каких-либо ошибок, но локальное репо не обновляется, потому что SHA не совпадают после запуска скрипта.

Вот что у меня есть:

import git
from git import Repo

repo= git.Repo(path/to/local/instance/of/repo)
o = repo.remotes.origin
repo.heads.master.set_tracking_branch(o.refs.master)
repo.heads.master.checkout()
o.pull()
o.push()

По сути, мне интересно, есть ли способ указать gitpython для запуска «git pull alias_name master» вместо «git pull -v origin» (который, по-видимому, работает по умолчанию с o.pull())?


person sc_eric    schedule 14.02.2017    source источник


Ответы (1)


Как упоминалось в "GitPython ничего не появляется в рабочей копии после извлечения", если вы установите master уже в origin/master, извлечение может не сделать многое..

Попробуйте в вашем случае сначала выборку.

o.fetch()
repo.head.ref.set_tracking_branch(o.refs.master)
o.pull() 

Или, как показано в официальном руководстве, убедитесь, что локальный мастер существует, создайте его, если нет:

empty_repo.create_head('master', origin.refs.master).set_tracking_branch(origin.refs.master).checkout()
person VonC    schedule 14.02.2017
comment
Выполнение empty_repo.create_head('master', origin.refs.master).set_tracking_branch(origin.refs.master) приводит к ошибке: OSError: Reference at 'refs/heads/master' does already exist, pointing to u'05c3e4762486571918569557d043f5cb59857e06', requested was '23553a1854cebdbe31322d0c1dee5a1aa7b03cf7', из-за чего я полагаю, что локальный мастер уже существует. Кроме того, запуск git branch из репозитория (через git в терминале, вне скрипта) показывает, что я нахожусь на локальном сервере. Я попытался сначала получить, как вы упомянули, но все еще имею ту же проблему. - person sc_eric; 15.02.2017