執行 go get 取得私有庫時,出現以下錯誤訊息:
go: downloading previate.gitlab.com/api/common v0.0.7 go: usersystem/api imports config: previate.gitlab.com/api/[email protected]: reading previate.gitlab.com/api/common/go.mod at revision v0.0.7: git ls-remote -q origin in這個錯誤顯示 go get 取得了一個無效的版本,因為找不到指定的版本 v0.0.7 導致的錯誤。
以下紀錄了排查的過程以及最後解決的方式‼️如果有遇到相同的問題,可以參考以下的排查方式:
檢查 go env🔍#
檢查 go env,確認 GOPRIVATE 是否有設定私有庫的 domain。設置 GOPRIVATE 可以讓 go get 在存取私有庫時,使用 git 的方式存取,而不會使用 proxy.golang.org。
go env -w GOPRIVATE=previate.gitlab.com檢查 git config🔍#
go get 私有庫套件時,預設會使用 HTTPS 的方式存取,會需要輸入使用者名稱與個人存取權杖 (Personal Access Token) 來進行驗證,如果沒有跳出輸入帳號密碼的提示。可以使用 ssh 的方式存取,如果已經有在私有庫配置好 SSH Key,則不需要輸入帳號密碼。
git config --global url."[email protected]:".insteadOf "https://previate.gitlab.com/"檢查 git 的歷程🔍#
這行指令可以檢查 go get 在取得私有庫套件時,git 的歷程,並且可以看到 git 在存取私有庫時,是否有出現錯誤訊息。
GIT_TERMINAL_PROMPT=1 GIT_TRACE=1 go get -x previate.gitlab.com/api/[email protected]可以看到更詳細的錯誤訊息✉️
get "previate.gitlab.com/api/common": found meta tag vcs.metaImport{Prefix:"previate.gitlab.com/api/common", VCS:"git", RepoRoot:"https://previate.gitlab.com/api/common.git"} at //previate.gitlab.com/api/common?go-get=1
go: previate.gitlab.com/api/[email protected]: reading previate.gitlab.com/api/common/go.mod at revision v1.0.35: unknown revision refs/tags/v1.0.35這裡發現 Go 其實已經成功透過 ?go-get=1 解析出私有庫結構,但是在取得指定的版本 v1.0.35 時,出現了 unknown revision。
檢查 git ls-remote🔍#
檢查共用私有庫的 git ls-remote 是否可以正常存取,並且確認是否有 v0.0.7 這個 tag。
git ls-remote https://previate.gitlab.com/api/common.git如果可以正常存取,會看到類似以下的輸出:
e1f6c3b8d9f4c3e5e5e refs/tags/v0.0.7
v1f6asdfas2343sfasg refs/tags/v0.0.6
afa1e1f8uw3b89f4c3e refs/tags/v0.0.5解決方式✅#
上述的問題都檢查過了,最後還是出現 “Invalid Version: Unknown Revision” 的錯誤訊息,最後懷疑可能是 git 的套件出現問題,嘗試更新 git 版本,更新後就可以正常使用 go get 取得私有庫套件。
brew upgrade git感想💭#
老實說最後也不知道為什麼會想要去更新 git 版本,因爲已經黔驢技窮了

本來只是抱持著姑且一試的心情去嘗試的沒想到就真的好了。不過上面的檢查流程還是很重要,如果可以提前知道問題並解決那就更好了!











