2017-02-14 4 views
1

Я относительно новичок в Python и пытаюсь использовать GitPython, чтобы вытащить изменения из удаленного репозитория в его локальный экземпляр, который уже был клонирован.Как использовать gitpython для запуска 'git pull alias_name master', где alias_name является настраиваемым псевдонимом?

Вне сценария, запуская '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 запустить «мерзавец тянуть ALIAS_NAME мастер» вместо «мерзавец тянуть -v происхождения» (который, как представляется, работать по умолчанию с помощью o.pull())?

ответ

0

Как уже упоминалось в «GitPython nothing appears in working copy after pull», если вы установите master уже origin/master, тянуть не может сделать много ..

Try в вашем случае выборки первой.

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

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

empty_repo.create_head('master', origin.refs.master).set_tracking_branch(origin.refs.master).checkout() 
+0

Запуск 'empty_repo.create_head ('мастер', origin.refs.master) .set_tracking_branch (origin.refs.master) ' выдает ошибку: ' OSError: Ссылка на 'ссылки/глав/мастер' уже существует, указывая на u'05c3e4762486571918569557d043f5cb59857e06' , запрошенный «23553a1854cebdbe31322d0c1dee5a1aa7b03cf7'' бее ch поведет меня поверить, что местный мастер уже существует. Кроме того, запуск 'git branch' изнутри репо (через git в терминале, вне сценария) показывает, что я нахожусь на главном сервере. Я попробовал сначала сначала, как вы упомянули, но по-прежнему имеет ту же проблему. –

Смежные вопросы