自從golang 1.11推出go moudle機制來更好的管理項目依賴后,就開始小范圍嘗試使用go mod來替換曾經的dep,實話實說還不錯,很穩(wěn)定,比起dep以及第三方的govendor來說也更加方便和快速。
在曾經使用的項目上中,有一部分項目的依賴是放在github中的公開倉庫的(如中間件、工具包),放入公開倉庫中然通過dep將依賴拉取到vendor中。
最近內部又做了個相關的依賴包,也不算工具,但這次多少跟業(yè)務有點結合,這次肯定不能放在github public倉庫,于是就想著,放入內部的gitlab私有倉庫中,想著以后能不能把github中的某一部分也遷移過來。
比如,通過RPC或HTTP調用服務時可以把公共的struct,service,method放入gitlab私有倉庫中,這是必然的。
在public倉庫好說,在go mod init gitlab.com/groupName/projectName后,不做任何處理直接直接 go mod vendor會自動拉取第三方依賴。但是如果是gitlab等私有倉庫中是get不下來的。
這本質上還是解決go get的問題。所以,接下來,我們要解決go get私有倉庫:
- 獲取gitlab的access token
進入Gitlab—>Settings—>Access Tokens,然后創(chuàng)建一個personal access token,這里權限最好選擇只讀(read_repository)。
- git配置添加access token
有了access token后,我們還需要在git中進行配置,這樣才能go get下了私有倉庫的包,需要把剛剛的token添加進git的請求頭中,操作如下:
git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN"
- 配置git將請求從ssh轉換為http
配置如下:
git config --global url."git@gitlab.com:groupName/projectName.git".insteadOf "https://gitlab.com/groupName/projectName.git"`
也可以直接全局替換,那么可以拉取域名下的所有包,如:
git config --global url."git@gitlab.yoursite.com:".insteadof "https://gitlab.yoursite.com/"
上述配置已經完成了,可以試著拉取gitlab私有倉庫的代碼:
go get -u -v gitlab.com/groupName/projectName
此時,執(zhí)行go mod vendor也是可以正常拉取的。