在 go dep 中使用私有仓库

go dep 是常用的 golang 依赖管理工具,我们可以使用它来管理项目中所引用的依赖,已达到锁定依赖项目的特定版本,确保每次构建都能得到稳定的结果的目的。

dep 具有简洁的命令行,可以使用以下几个简单的命令来使用:

dep init
dep ensure
dep ensure -add xxx
dep ensure -update xxx

在真实的项目中,我们不仅会依赖公开的项目,也可能会依赖私有的项目,例如 github 上的私有仓库。

问题

在某次对项目依赖进行更新时,dep 反馈了如下错误:

unable to update repository: fatal: could not read Username for 'https://github.com': terminal prompts disabled

提示 git 需要输入用户名,但是 terminal prompts 被禁止了。使用如下命令行开启:

export GIT_TERMINAL_PROMPT=1

再次更新,dep 阻塞在输入用户名之后,git 没有提示需要输入密码。使用 go get 进行更新可以正常输入密码,可知 dep 并没有进行提示。

更进一步排查发现,需要输入密码的仓库可以使用 ssh 的方式进行认证,在 .gitconfig 文件中进行如下配置:

[url "git@github.com:"]
         insteadOf = https://github.com/

或者使用命令:

git config --global url."git@github.com:".insteadOf "https://github.com/"

再次更新,dep 同样没有提示输入密码。因为该 ssh key 需要输入密码才能使用,现在可能的解决方式如下:

  1. 去掉密码
  2. 使用 ssh-agent

因为该 ssh key 必须要使用密码,所以采用第二种方案:

eval ssh-agent -s
ssh-add <path-to-privKey>

再次更新即成功。

参考资料

    原文作者:小小笑儿
    原文地址: https://zhuanlan.zhihu.com/p/50960314
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞