如何在 python 中使用 dulwich 获取数据

How to fetch using dulwich in python

我正在尝试使用 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)

~/temp/remote 有一个现有的 git 存储库,在 ~/temp/local

有一个新初始化的存储库

remote_refs 显示了我所期望的一切,但是 local_refs 是一个空字典,而 git branch -a 在本地仓库 returns 什么都没有。

我是不是遗漏了什么明显的东西?

这是德威 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 频道上的讨论之后,我尝试从本地回购中 运行 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() 不更新引用,它只是获取对象,然后 returns 远程引用,因此您可以使用它来更新目标存储库引用。