提交`vendor`目录是最佳做法吗?

Zty*_*tyx 13 go

dep用来处理我的Go依赖项.最佳做法是将vendor目录提交到版本控制吗?或者最好dep ensure在签出存储库后始终执行?

Zty*_*tyx 14

dep工具的FAQ 回答了这个问题:

我应该提交我的供应商目录吗?

由你决定:

优点

  • 这是获得真正可重现的构建的唯一方法,因为它可以防止上游重命名,删除和提交历史覆盖.*在大多数操作之后,您不需要额外的dep确保步骤来同步供应商/与Gopkg.lock,例如go get,cloning,getting latest,mergeing等.

缺点

  • 你的回购将会更大,可能会更大,但dep prune可以帮助减少这个问题.*PR diffs将包括在供应商/下修改Gopkg.lock时的文件的更改,但默认情况下在Github上隐藏vendor /中的文件.

  • 另一个优点是,当您使用CI时,无需在每次运行管道时都下载依赖项。 (4认同)
  • 我更喜欢提交供应商文件夹。我遇到了一些回购协议消失的情况,可能是因为有些公司购买了它。 (2认同)

Hom*_*ani 5

想象一下,如果依赖项被作者脱机,您的项目会发生什么。在 Go 有一个中央服务器来保存所有无法删除的包之前,很多人总会看到需要提交 vendor 文件夹

  • 虽然我理解这个想法,但我认为事实并非如此。比如说,你不会将`gtest`库与你的C++项目放在一起,你不会将`requests`库与你的Python项目放在一起,你不会将你的JS和PHP`vendor`/`node`放在一起与您的 Web 项目一起的文件夹。您不会将**任何**库与任何语言的项目放在一起。为什么 Golang 应该有所不同? (4认同)
  • @TheGodfather 因为它很容易就能做到。 (2认同)