如何使用gitpython运行' git pull alias_name master' alias_name是自定义别名吗?

时间:2017-02-14 19:42:48

标签: python git github git-pull gitpython

我对Python比较陌生,并且正在尝试使用GitPython将更改从远程存储库下拉到已经克隆的本地对应项。

在脚本之外,运行' git pull alias_name master' (其中alias_name是自定义别名)每次都直接从终端工作。我通过比较repo的本地实例和远程

之间的提交SHA来验证本地repo实际更新了
cd path/to/local/instance/of/repo
git pull alias_name master
git log --pretty=format:'%h' -n 1

如果上面返回的内容与远程仓库的Web界面的提交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()一起运行?)

1 个答案:

答案 0 :(得分:0)

正如在" GitPython nothing appears in working copy after pull"中提到的那样,如果您已将master设置为origin/master,那么拉动可能没什么用。

首先尝试获取。

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