我正在用Go编写一个要部署在heroku上的项目,使用godep管理依赖项。

当我godep save时,我既得到一个Godeps.json文件,列出了我的版本依赖性,又得到了_workspace/目录,其中包含复制了所有依赖项的源。我不想提交_workspace,所有这些代码已经在其他地方的github上了。似乎Godeps.json具有我们在heroku buildpack时对版本锁定的依赖项进行go get所需的所有信息。

Several sources建议提交完整的Godeps/目录,但其他人建议使用might not be necessary

Godep文档并没有太大帮助:



Godeps.json 是文件吗?

最佳答案

官方答案:

从GitHub问题#131:



这也是godep的作者谈论他的项目和背后的想法-Vendoring and Import Path Rewriting

个人意见:

我认为没有正确的方法来做到这一点。

提交 vendor 库看起来确实很尴尬,但是它具有以下优点:

  • 您不依赖外部服务(GitHub等)。 GitHub发生故障,也许您有一些可怕的公司政策阻止您使用它,可能存储库消失或历史记录被重写,可能您位于防火墙(登台/构建服务器)之后,等等。
  • 每次对您的部门进行更新时,您都会对变化有所不同。
    当更新到较新的版本时,或者在跟踪正在使用的代码时,仅跟踪更改,这将很有帮助。

  • 最后由您自己权衡利弊。就我个人而言,每次必须提交 vendor 代码时,我都会感到畏缩,但在Go项目中,我却这样做。最起码到现在。

    同样,像Google和Facebook这样的公司大多将所有内容都保存在一个存储库中,其中包括 vendor 代码(或者我听说)。

    关于该主题的有趣文章:
    Go Package Management

    10-01 03:01