AdSense

網頁

2021/7/15

Golang 從私有的GitLab取得依賴module Unable to get modules from private gitlab repository

今天第一次執行go run運行專案時因為go.mod中的一些依賴module無法下載倒置無法運行。


Go因為無法存取位在私有gitlab repository的module而出現錯誤訊息如下。

go: gitlab.abc.com/demos/private-lib@v1.0.0: unknown revision v1.0.0

確認GO111MODULESGOPROXYGOPRIVATEGONOSUMDB等環境變數設定正確且能從網頁存取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 rungo testgo buildgo get等會下載module的命令時即可正確存取私有的gitlab repository。


這問題我花了兩小時才解決,因為少加了SSH位址後的冒號。


沒有留言:

AdSense