美文网首页
go import svn 的代码库

go import svn 的代码库

作者: yz08150 | 来源:发表于2021-10-28 18:24 被阅读0次

    需求

    项目 test0 需要引用一个 svn 的代码库
    这个代码库是一个公司内部的代码库
    应该怎么添加

    module test0
    
    go 1.16
    
    require (
        github.com/gin-gonic/gin v1.7.1
        此处需要添加公司内部的svn的代码库
    )
    
    

    解决方式

    下面的解决方式是在 go v1.16.5 版本下尝试的

    1. test0项目中,引用 svn 代码库地址,使用 replace 的方式,简化路径导入
    module test0
    
    go 1.16
    
    require (
        github.com/gin-gonic/gin v1.7.1
        serverboot v0.0.1
    )
    
    replace serverboot => svn.xxx.com/a/b/c/src.svn 666
    

    如上面的 servboot 就是为了引用 svn 代码库
    svn.xxx.com/a/b/c/src 是你的svn代码库的 真实地址
    svn.xxx.com/a/b/c/src.svn 注意 .svn 后缀,必须添加,为了让go mod 自动使用 svn 的方式去拉取代码,而不是 代理的方式

    2. 设置 go 的 环境变量
    set GOPROXY=https://goproxy.io,direct
    set GOINSECURE=svn.xxx.com
    set GOPRIVATE=svn.xxx.com
    

    GOPROXY 添加一个 direct 的值,是为了让 go 如果通过 goproxy.io 拉取不到代码的话, 尝试使用 direct 的方式去拉取。go 是根据 svn.xxx.com/a/b/c/src.svn 这个地址中的后缀 .svn 去确定拉取方式的
    Goland 的 go 的代理设置,最好也加上 direct

    image.png

    GOINSECURE 添加代码库的地址svn.xxx.com,去掉路径,是为了让go拉取代码的时候,不使用安全的方式,比如https。如果不添加,对于svn拉取的时候,会使用 ssh 的方式去拉取。
    GOPRIVATE 添加代码库的地址svn.xxx.com,去掉路径

    当设置完,使用一次后,再次看 env ,会发现 这些值也被设置了 :
    set GONOSUMDB=svn.xxx.com
    set GONOPROXY=svn.xxx.com

    3. 然后直接 go build 即可

    如果这样改完的话,可能会报
    missing go.sum entry 的错误,使用 go mod tidy 执行一下,即可

    为什么

    https://golang.google.cn/cmd/go/
    https://golang.google.cn/ref/mod#go-mod-file

    可参照上面的两个官方文档中的相关描述

    go mod 是可以通过 默认的代理方式,自定义代理方式,direct 的方式(即通过 .xxx 后缀来识别拉取方式的,比如 .git .svn .hg 等)

    如果使用代理的方式,不管是官方代理,还是自定义的代理,都必须实现 GOPROXY 的协议
    https://golang.google.cn/cmd/go/#hdr-Remote_import_paths
    https://golang.google.cn/ref/mod#goproxy-protocol

    然后就是 direct 的方式
    direct 方式涉及到的几点内容:

    1. 怎么确定使用哪种拉取方式 svn? git?
      使用路径最后加上 .xxx 的方式

    2. svn 可以使用了,那么版本怎么办?
      通常情况下,go 使用的都是 规范化的版本,比如 v1.1.1
      但是,go 也可以使用非规范化的版本,比如 使用标签,使用分支名,等等,比如上面的 svn 版本 666 ,就是一个非规范化版本
      在go mod 下载完导入之后,会发现 项目的 go.mod 中的 非规范化版本,比如 666 ,自动的变成了一个 规范化的版本 v0.0.0-2021111111111111-000000000666
      如果想要使用最新版本,666 换成 head 即可
      具体可参照 https://golang.google.cn/ref/mod#versions

    3. 版本也可以了,svn 的用户名密码怎么办?
      默认的情况下,go 使用本机用户名 ,ssh 的方式 去连接 svn 的机器。
      这个很不好处理,后来尝试 go get -insecure svn.xxx.com/a/b/c.svn@666 的方式,发现成功了
      但是,go 以后版本会 去掉 -insecure 参数,并且,也不好设置这个参数,所以,使用 上述配置 GOINSECURE 变量值的方式

    相关文章

      网友评论

          本文标题:go import svn 的代码库

          本文链接:https://www.haomeiwen.com/subject/gsbvaltx.html