我正在Go中编写一个项目部署在heroku上,使用godep管理依赖项。
当我godep save
时,我得到一个Godeps.json
文件列出我的版本依赖项和一个_workspace/
目录,其中包含所有依赖项的源代码。我宁愿不提交{ {1}},所有代码已经在其他地方的github上了。似乎_workspace
具有我们在heroku buildpack时间Godeps.json
版本锁定依赖项所需的所有信息。
Several sources建议提交完整的go get
目录,但其他人建议might not be necessary。
godep文档帮助不大:
这将保存文件Godeps / Godeps.json的依赖项列表,并将其源代码复制到Godeps / _workspace中。阅读其内容并确保其合理。然后将文件提交到版本控制。
Godeps.json 文件?
答案 0 :(得分:18)
官方回答:
来自GitHub问题#131:
godep
的预期用途是供应商依赖项,并将_workspace目录提交给版本控制。请参阅#123中链接的@kr提案文档(提案:http://goo.gl/RpYs8e)正如该提案中所讨论的,godep曾经有一种支持不销售依赖关系的模式(-copy = false)。我的猜测是自述文件中含糊不清的语言可能是由于这一点。此模式已被删除,如#123中所述。
此处还有godep
作者在谈论他的项目和想法 - Vendoring and Import Path Rewriting
个人观点:
我认为没有正确的方法可以做到这一点。
提交供应商库似乎很尴尬,但它有它的优点:
最后,您可以权衡利弊。我个人每次都要提交供应商代码时都会畏缩,但在我的Go项目中我会这样做。至少现在。
Google和Facebook这样的公司大多将所有内容保存在一个存储库中,其中包含供应商代码(或者我已经听过)。
有关该主题的有趣文章: Go Package Management
答案 1 :(得分:2)
godep需要json文件才能回读依赖关系,如update.go
所示。
因此该文件需要进行版本控制。
但是godep would fill the content of godep/_workspace
,这意味着它是"生成的"内容:您不需要对其进行版本化。
答案 2 :(得分:2)
只需将Godeps.json文件添加到repo,将_workspace添加到.gitignore列表:)。
虽然你的代码应该完全包含在你的repo中,但依赖关系必须以某种方式引用(godep.json,package.json,git submodule ......你选择),仅此而已。 同样的策略适用于npm,bower,apt和所有其他包管理器。
您的回购 - 您的东西+对供应商库的引用(当然,如果可能,您不能引用sourceforge zip文件)。
正如@VonC所说,我们不想对供应商库进行版本化。