我对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()一起运行?)
答案 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()