2

我正在尝试git fetch -a在 python 中使用 dulwich 库。

使用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,新初始化的存储库位于~/temp/local

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

我错过了一些明显的东西吗?

这是在德威 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从本地 repo 中运行。它给出了与我的脚本相同的结果,即远程参考正确地打印到控制台,但git branch -a什么也没显示。

编辑 - 已解决

一个简单的循环来更新本地 refs 就可以了:

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

1 回答 1

0

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

于 2016-01-05T13:15:43.477 回答