为什么修正go.mod推送后go get仍长时间拉取过时commit?
问题原因
- Go公共模块代理的缓存机制
默认配置下Go工具链会优先从公共模块代理(如proxy.golang.org)拉取模块元数据、go.mod文件和校验信息。这类公共代理对每个仓库的版本信息设置了较长的缓存时间,通常为30~60分钟。你推送修复后的提交到GitHub后,代理不会立刻触发源站同步,缓存过期前会一直返回旧的错误版本的元数据,因此go get仍然会拿到哈希为8d5688e的错误版本信息,提示路径不匹配报错。 - Go模块的版本解析逻辑
不带版本号执行go get github.com/bronger/abcde时,Go工具链默认会优先使用代理返回的最新版本记录,不会主动去GitHub仓库拉取最新提交记录,因此代理缓存更新前,就算GitHub已经存在修复后的80c407b提交,Go也感知不到新的版本存在。
临时规避方案
如果不想等待代理缓存自动过期,可以通过以下两种方式强制拉取修复后的版本:
- 直接指定修复后的提交哈希拉取:
go get github.com/bronger/abcde@80c407b - 临时关闭代理,直接从GitHub源站拉取:执行
GOPROXY=direct go get github.com/bronger/abcde
内容的提问来源于stack exchange,提问作者Torsten Bronger
相关产品推荐
相关产品推荐

