我正在使用Go模塊。為了使用模塊版本,我不能使用本地模塊。例如:replace locakpkg => ../localpkg v0.1.0上述操作將失敗,因為到目前為止,替換本地路徑無法有版本(轉到 1.15)。因此,為了使模塊版本正常工作,我決定使用私有ssh存儲庫。我確實搜索了如何使私有ssh存儲庫工作兩天。通過關注許多在線文章,我做到了git config --global [email protected]:.insteadOf https://private.com/go env -w GOPRIVATE=private.com我發現go get總是會做https fetch來檢查ssl憑證。所以我也正確地配置了一個https服務器。但最終,我仍然收到一條錯誤消息:unrecognized import path "private.com/foo": reading https://private.com/foo?go-get=1: 404 Not Found我確實谷歌了這個錯誤,并發現了這個規范 https://golang.org/ref/mod#vcs-find 它說我必須讓服務器回復https獲取請求。<meta name="go-import" content="root-path vcs repo-url">如果有一種方法可以在本地模塊包中使用git標簽版本控制,我可以在go.mod中使用本地替換,而不是配置私有ssh存儲庫。如果以上幾點無法實現,那么在配置私有 ssh 存儲庫時如何避免 https 獲???我認為ssh repo與https協議無關。
1 回答

蝴蝶刀刀
TA貢獻1801條經驗 獲得超8個贊
(我在 Linux 上使用 go 1.15。發布此答案時的最新穩定版本)
我解決了這個問題并在這里發帖,希望有一天這會幫助其他人。我在網上搜索沒有找到任何正確的答案。
簡而言之,答案是在所有地方都使用后綴。不帶后綴,將使用代替 (git)。.git
.git
go mod tidy
go get
https
ssh
在客戶端:
該文件(在 linux 上)如果您在服務器上使用 path:~/.gitconfig
/repopath/foo.git
[url "ssh://[email protected]"] insteadOf = https://private.com
該文件(在 linux 上)如果您在服務器上使用 path:~/.gitconfig
~/repopath/foo.git
[url "[email protected]:"] insteadOf = https://private.com/
執行以下命令以在 Linux 上進行更新:~/.config/go/env
go env -w GOPRIVATE=private.com
在 中,它應該使用go.mod
require private.com/repopath/foo.git v0.1.0
在 中,它應該是file.go
import private.com/repopath/foo.git
在 SSH 服務器上
在私有服務器上應該有:foo.git/go.mod
module private.com/repopath/foo.git
并確保服務器上的 git 存儲庫具有 標記版本 。不要忘記在客戶端使用將標簽版本更新到服務器。沒有 ,則不會推送標記版本。v0.1.0
git push --tags
--tags
在添加后綴到所有必需的位置后,將不再發送https請求。.git
go mod tidy
go get
- 1 回答
- 0 關注
- 163 瀏覽