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