中心化的依赖管理比如 npm、pip 之类都很好建 mirror,有 mirror 后本地拉依赖、CI 构建速度都很好保证。
但 Golang 的依赖是分布式的,依赖多的话 mirror 很难建,各包管理工具也最多支持单个包的 mirror 设置。
同时所依赖的 github.com 、golang.org 在特殊时期很难保证访问的可靠性,一开大会可能就没法工作了。
现在我常使用的办法是直接把 vendor 直接提交的代码仓库,但是感觉这个办法很脏,遇到需要更新依赖的时候一大片绿。
所以我写了个代理 Gotit 尝试解决这个问题,原理就是中间人 + Git 仓库缓存。将包管理工具的代理设置配到 Gotit,Gotit 就能自动帮你拉并缓存用到的 Golang 包。
一方面有缓存的话也可以加快 CI 构建的速度;另一方面如果使用的人多,缓存的包也越多,如果外网断掉你需要的包也可能在代理的缓存中找到,不至于工作停摆。
具体使用办法可以查看项目 README https://github.com/faceair/gotit
项目目前只是验证了可行性,对程序的可靠性还不敢做太多保证,欢迎多多试用有问题可以提 issue ~
但 Golang 的依赖是分布式的,依赖多的话 mirror 很难建,各包管理工具也最多支持单个包的 mirror 设置。
同时所依赖的 github.com 、golang.org 在特殊时期很难保证访问的可靠性,一开大会可能就没法工作了。
现在我常使用的办法是直接把 vendor 直接提交的代码仓库,但是感觉这个办法很脏,遇到需要更新依赖的时候一大片绿。
所以我写了个代理 Gotit 尝试解决这个问题,原理就是中间人 + Git 仓库缓存。将包管理工具的代理设置配到 Gotit,Gotit 就能自动帮你拉并缓存用到的 Golang 包。
一方面有缓存的话也可以加快 CI 构建的速度;另一方面如果使用的人多,缓存的包也越多,如果外网断掉你需要的包也可能在代理的缓存中找到,不至于工作停摆。
具体使用办法可以查看项目 README https://github.com/faceair/gotit
项目目前只是验证了可行性,对程序的可靠性还不敢做太多保证,欢迎多多试用有问题可以提 issue ~
