我试图在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)
答案 0 :(得分:0)
LocalGitClient.fetch()不更新引用,只是获取对象然后返回远程引用,以便您可以使用它来更新目标存储库引用。