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 需要输入密码才能使用,现在可能的解决方式如下:
- 去掉密码
- 使用 ssh-agent
因为该 ssh key 必须要使用密码,所以采用第二种方案:
eval ssh-agent -s
ssh-add <path-to-privKey>
再次更新即成功。