如何在 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 远程引用,因此您可以使用它来更新目标存储库引用。
我正在尝试使用 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 远程引用,因此您可以使用它来更新目标存储库引用。