返回顶部
首页 > 资讯 > 精选 >使用 go-git 的 Plainclone 功能时,git repo url 会附加 /git-upload-pack
  • 208
分享到

使用 go-git 的 Plainclone 功能时,git repo url 会附加 /git-upload-pack

2024-02-12 07:02:40 208人浏览 薄情痞子
摘要

PHP小编百草介绍,使用Go-git的Plainclone功能时,当你提供git repo url时,会自动附加/git-upload-pack。这是因为git-upload-pack

PHP小编百草介绍,使用Go-git的Plainclone功能时,当你提供git repo url时,会自动附加/git-upload-pack。这是因为git-upload-pack是git协议用于克隆和拉取远程仓库的命令。通过这个功能,你可以轻松地克隆和拉取远程仓库,而无需手动添加/git-upload-pack。这样一来,你可以更便捷地使用go-git进行git操作,提高工作效率。

问题内容

尝试从 Azure devops 克隆存储库。

func (gitopt *GitOptions) clone() (*git.Repository, error) {
    r, err := git.PlainClone(gitopt.RepoDir, false, &git.CloneOptions{
        Progress: os.Stdout,
        URL:      "https://",
        Auth: &Http.BasicAuth{
            Username: "gituser",
            PassWord: gitopt.PAT,
        },
    })
    if err != nil {
        log.Info(err.Error())
        return nil, err
    }

    return r, nil
}

运行此代码会在 repo url 末尾添加 /git-upload-pack (“https:///git-upload-pack”),因此克隆失败,状态代码为 400。 无法理解为什么要附加此内容。

解决方法

基于 HTTP 的 Git 协议由两个步骤组成,具体取决于所使用的协议版本。在 v0 和 v1 中,第一个请求是 /info/refs 并读取正在使用的引用,然后第二个请求是 /git-upload-pack (用于获取和克隆)或 /git-receive- pack(用于推送)。在 v2 中,端点是相同的,但第一个是功能请求,然后向第二个端点进行 ref 请求和数据传输。

在所有这些情况下,您提供的 URL 只是附加路径的基础。不同的路径使 Nginx 或 Apache 等背后的简单 Git 服务器的访问控制变得更容易,这就是为什么不只有单个 URL 组件的原因。

所以生成的 URL 实际上是正确的。您看到 400 的原因是因为存在问题 Azure DevOps 要求客户端支持 multi_ack 功能,而 go-git 不支持。虽然从技术上讲,服务器不必为任何他们不想提供的客户端提供支持,但 Git 智能 HTTP 协议通常设计为优雅地降级,因此客户端必然支持任何特定的一组并不是一个安全的假设。功能,而 Azure DevOps 应避免做出这种假设。

链接的问题有一个指向拉取请求的链接,该请求修复了某些(但不是全部)情况下的问题。不过,您可能需要更新到更高版本才能利用这一点。

以上就是使用 go-git 的 Plainclone 功能时,git repo url 会附加 /git-upload-pack的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 使用 go-git 的 Plainclone 功能时,git repo url 会附加 /git-upload-pack

本文链接: https://lsjlt.com/news/563728.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作