【问题标题】:pygit2 clone_repository authentication required but no callback set需要 pygit2 clone_repository 身份验证,但没有设置回调
【发布时间】:2015-06-08 18:58:41
【问题描述】:

我正在尝试使用 ssh 链接从存储中克隆存储库。我收到一条错误消息,提示需要身份验证,这不需要用户名和密码。如何解决此错误?

from pygit2 import *
repo_name = "ssh://git@stash:TheProject"
clone_repository(self.repo_name, self.repo_dir, credentials=cred)

Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__ return self.func(*args)
File "rio_telem_tool.py", line 143, in build clone_repository(self.repo_name, self.repo_dir)
File "/usr/local/lib/python2.7/dist-packages/pygit2/__init__.py", line 265, in clone_repository check_error(err)
File "/usr/local/lib/python2.7/dist-packages/pygit2/errors.py", line 56, in check_error raise GitError(message)
GitError: authentication required but no callback set

【问题讨论】:

  • 您能否使用git clone 从命令行成功克隆该存储库而不提示输入密码?
  • ssh 总是需要用户名和密码。您在 url 本身中提供用户名。 git 生成 ssh 命令,它将查看配置和 ssh 代理,而 libgit2 不会,您需要准确告诉它您要使用哪种身份验证。

标签: python git pygit2


【解决方案1】:

这是一个老问题,但我最近有两个问题要解决:

  1. 如何为 pygit2 提供用户名和 git 令牌以连接到 github
  2. 由于这是一个完全内部的应用程序,如何跳过阻止与 github 连接的证书检查

解决方案涉及子类化 pygit2.RemoteCallbacks 并像这样调用它:

 pygit2.clone_repository(your_args, callbacks=self.MyRemoteCallBacks(user,token)

班级:

class MyRemoteCallbacks(pygit2.RemoteCallbacks):
        def __init__(self, user, token):
            self.user = user
            self.token = token
        def credentials(self, url, username_from_url, allowed_types):
            return pygit2.UserPass(self.user,self.token)
        def certificate_check(self, certificate, valid, host):
            return True

【讨论】:

    猜你喜欢
    • 2022-10-16
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2010-11-04
    相关资源
    最近更新 更多