今天第一次執行go run
運行專案時因為go.mod
中的一些依賴module無法下載倒置無法運行。
Go因為無法存取位在私有gitlab repository的module而出現錯誤訊息如下。
go: gitlab.abc.com/demos/private-lib@v1.0.0: unknown revision v1.0.0
確認GO111MODULES
、GOPROXY
、GOPRIVATE
、GONOSUMDB
等環境變數設定正確且能從網頁存取module的專案後,發現根本原因是clone同個gitlab中的Go專案是用SSH keys,而非使用HTTPS帳密,但Go從gitlab下載module時實際上是依靠git的HTTPS帳密來進行,又我本機的git沒有設定HTTPS的credentials(帳密)所以Go無法正常下載而造成問題。
解決辦法是把git存取私有gitlab的方式從HTTPS存取改為SSH存取。
例如module的私有gitlab repository為gitlab.abc.com
,則在命令列(或Git Bash)輸入
git config --global url."git@gitlab.abc.com:".insteadOf "https://gitlab.abc.com/"
。
git@gitlab.abc.com
為gitlab SSH位址,注意SSH位址後要加上冒號:
;https://gitlab.abc.com/
為gitlab HTTPS位址。
$ git config --global url."git@gitlab.abc.com:".insteadOf "https://gitlab.abc.com/"
輸入完使用git config --list
檢視git配置參數,可看到多了下面設定。
$ git config --list
...
url.git@gitlab.abc.com:.insteadOf=https://gitlab.abc.com/
在.gitconfig
文件中則是:
.gitconfig
...
[url "git@gitlab.abc.com:"]
insteadOf = http://gitlab.abc.com/
完成以上設定後執行go run
、go test
、go build
或go get
等會下載module的命令時即可正確存取私有的gitlab repository。
這問題我花了兩小時才解決,因為少加了SSH位址後的冒號。
沒有留言:
張貼留言