如何在python中使用dulwich获取

时间:2016-01-05 10:22:09

标签: python git 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)

~/temp/remote处有一个现有的git存储库,在~/temp/local处有一个新初始化的存储库

remote_refs显示了我期望的所有内容,但local_refs是一个空字典,而本地代表上的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)

1 个答案:

答案 0 :(得分:0)

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