默认情况下,如果无法找到对GOPATH的依赖关系,Go会通过获取master(github)或默认(mercurial)中的最新版本来提取导入的依赖项.虽然这个工作流程很容易掌握,但严格控制却变得有些困难.由于所有软件更改都会带来一些风险,因此我希望以可管理且可重复的方式降低此潜在更改的风险,并避免无意中获取依赖项的更改,尤其是在通过CI服务器运行干净构建或准备部署时.
什么是我可以锁定(即锁定或捕获)包依赖的最有效方式,所以我发现自己无法重现旧包,或者更糟糕的是,当我即将发布时意外破坏?
----更新----
关于当前包装状态的其他信息.虽然我最终(截至7.20.13)捕获第三方文件夹中的依赖项并管理更新(ala Camlistore),但我仍然在寻找更好的方法......
此外,请务必查看go 1.5供应商/实验,以了解在未来版本中如何处理该问题.
你可能会发现Camlistore有趣的方式.
请参阅第三方目录,特别是update.pl和rewrite-imports.sh脚本.这些脚本更新外部存储库,必要时更改导入,并确保使用其余的camlistore代码签入静态版本的外部存储库.
这意味着camlistore具有完全可重复的构建,因为它是自包含的,但第三方组件可以在camlistore开发人员的控制下更新.
戈德普
我去年初(2014 年)开始使用godep并且对它非常满意(它满足了我在最初的问题中提到的问题)。我不再使用自定义脚本来管理vendoring依赖作为godep只是需要照顾它。无论时间或机器的封装状态如何,它都非常适合确保不会引入漂移。它与现有的机制一起工作,go get并引入了基于 Godeps/godeps.json 的pin ( godep save) 和 restore ( godep restore) 的能力。
一探究竟:
https://github.com/tools/godep