golang 项目引入私有仓库包

场景:

当你多个项目,都需要使用一个或者多个方法,那么可以将公共方法,抽成一个包,进行管理(类似Log模块等)。这时候可以将你的包上传到私有的仓库,其他项目引入该包即可。下面来介绍下,如何引用私有仓库的包。

1. 创建一个新的 Git 标签

假设你已经在你的私有 GitLab 仓库目录中,并且你已经提交了所有的更改(运行了 git addgit commit)。现在你可以通过如下命令创建一个新的标签。

git tag v0.1.0

 

如果你想要附加注释到该标签,可以使用:

 
git tag -a v0.1.0 -m "Initial release"

 

2. 推送标签到 GitLab:

创建标签之后,需要将其推送到远程仓库:

 
git push origin v0.1.0
 
这样标签 v0.1.0 就会被推送到远程仓库,你的模块版本也就设置好了。
 

3. 在 go.mod 文件中使用这个版本号

在你需要调用这个私有模块的项目中,更新 go.mod 文件,指向这个特定的版本号。这可以通过 go get 命令自动完成:

 
go get gitlab.com/yourusername/yourrepository@v0.1.0

 

或者手动编辑 go.mod 文件:

 
module your-other-project

go 1.18

require (
    gitlab.com/yourusername/yourrepository v0.1.0
)

在这里需要注意,gitlab.com/yourusername/yourrepository这里的包名一定需要和依赖的包名保持一致

 

4. 更新依赖

 
go mod tidy

 

5.注意事项 

5.1 访问GitLab仓库认证失败

fatal: could not read Username for 'https://gitlab.xxxx.cn': terminal prompts disabled
Confirm the import path was entered correctly.
If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.

出现此错误通常是在访问私有 GitLab 仓库时认证失败。要解决这个问题,可以通过以下方法来确保 go get 能够正确地通过 HTTPS 认证访问私有仓库。

这里介绍一种设置环境变量的方法
 

1. 创建一个 Shell 脚本文件来返回访问令牌: 

echo 'echo <your_personal_access_token>' > /path/to/git-askpass.sh
chmod +x /path/to/git-askpass.sh
 
 
拓展如何获得access_token:
  1. 登录到你的 GitLab 账户。
  2. 点击右上角的用户头像,然后选择 "Settings"。
  3. 在左侧导航栏中选择 "Access Tokens"。
  4. 输入 token 名称,选择相应的作用域(至少需要 read_repository 权限)。
  5. 点击 "Create personal access token"。

 

2. 设置环境变量
export GIT_ASKPASS='/path/to/git-askpass.sh'
export GIT_TERMINAL_PROMPT=0

 

3.配置 GOPRIVATE

如果尚未配置,确保设置 GOPRIVATE 环境变量来指示 Go 不要在 go get 期间使用 Go module proxy。

 
export GOPRIVATE=gitlab.com/yourusername/*

 

通过这种方式,GIT_ASKPASS 脚本会在 Git 认证时返回访问令牌,从而避免手动输入用户名和密码。

 

 

 
 
posted @ 2024-09-22 16:16  changfan  阅读(165)  评论(0编辑  收藏  举报