如何在python中使用dulwich获取



我正在尝试使用python中的dulwich库来实现git fetch -a的等效功能。

使用上的文档https://www.dulwich.io/docs/tutorial/remote.html我创建了以下脚本:

from dulwich.client import LocalGitClient
from dulwich.repo import Repo
import os
home = os.path.expanduser('~')
local_folder = os.path.join(home, 'temp/local'
local = Repo(local_folder)
remote = os.path.join(home, 'temp/remote')
remote_refs = LocalGitClient().fetch(remote, local)
local_refs = LocalGitClient().get_refs(local_folder)
print(remote_refs)
print(local_refs)

现有git存储库位于~/temp/remote,新初始化的repo位于~/temp/local

remote_refs显示了我所期望的一切,但local_refs是一个空字典,本地repo上的git branch -a什么也不返回。

我是不是错过了一些显而易见的东西?

这是在dulwich 0.12.0和Python 3.5 上

编辑#1

在讨论了python-uk-irc通道之后,我更新了我的脚本,以包括determine_wants_all:的使用

from dulwich.client import LocalGitClient
from dulwich.repo import Repo
home = os.path.expanduser('~')
local_folder = os.path.join(home, 'temp/local'
local = Repo(local_folder)
remote = os.path.join(home, 'temp/remote')
wants = local.object_store.determine_wants_all
remote_refs = LocalGitClient().fetch(remote, local, wants)
local_refs = LocalGitClient().get_refs(local_folder)
print(remote_refs)
print(local_refs)

但这没有效果:-(

编辑#2

再次,在讨论了python-uk-irc通道之后,我尝试从本地repo中运行dulwich fetch。它给出了与我的脚本相同的结果,即远程引用被正确地打印到控制台,但git branch -a没有显示任何内容。

编辑-已解决

一个简单的循环来更新本地裁判就成功了:

from dulwich.client import LocalGitClient
from dulwich.repo import Repo
import os
home = os.path.expanduser('~')
local_folder = os.path.join(home, 'temp/local')
local = Repo(local_folder)
remote = os.path.join(home, 'temp/remote')
remote_refs = LocalGitClient().fetch(remote, local)
for key, value in remote_refs.items():
    local.refs[key] = value
local_refs = LocalGitClient().get_refs(local_folder)
print(remote_refs)
print(local_refs)

LocalGitClient.fetch()不更新引用,它只获取对象,然后返回远程引用,这样您就可以使用它来更新目标存储库引用。

相关内容

  • 没有找到相关文章

最新更新