我正在使用dep
来处理我的Go依赖项。最佳做法是将vendor
目录提交到版本控制中吗?或者最好在签出存储库后始终执行dep ensure
?
答案 0 :(得分:12)
dep
工具的常见问题解答answers:
我应该提交供应商目录吗?
取决于你:
赞成
- 这是获得真正可重现的构建的唯一方法,因为它可以防范 针对上游重命名,删除和提交历史覆盖。 * 您不需要额外的dep确保步骤来同步供应商/ Gopkg.lock经过大多数操作,如go get,cloning,getting 最新,合并等。
缺点
- 你的回购将会更大,可能会更大,但dep 修剪可以帮助减少这个问题。 * PR差异将包括更改 对于供应商下的文件/当Gopkg.lock被修改时,但是文件在 vendor /在Github上默认隐藏。
答案 1 :(得分:1)
想象一下,如果作者将依赖项脱机,那么您的项目将会发生什么。在Go拥有一个中央服务器来容纳所有无法删除的软件包之前,很多人总是会看到需要提交供应商文件夹
答案 2 :(得分:1)
来自 here 的另一个答案,答案是否:
一般建议是否定的。供应商目录(或安装依赖项的任何位置)应添加到 .gitignore
/svn:ignore
/etc.
最佳做法是让所有开发人员使用 Composer 安装依赖项。同样,构建服务器、CI、部署工具等应该适合运行 Composer 作为其项目引导的一部分。
虽然在某些环境中提交它可能很诱人,但它会导致一些问题:
如果你真的觉得你必须这样做,你有几个选择:
--prefer-dist
或将 preferred-install
设置为 dist。.git
目录,然后您可以将它们添加到您的 git repo 中。您可以使用 ZSH 中的 rm -rf vendor/**/.git
或 Bash 中的 find vendor/ -type d -name ".git" -exec rm -rf {} \;
来做到这一点。但这意味着您必须在运行 composer update 之前从磁盘中删除这些依赖项。/vendor/**/.git
) 以忽略所有供应商 .git
文件夹。这种方法不需要您在运行 Composer 更新之前从磁盘中删除依赖项。为了支持这个论点,我查看了 CocoaPods 提供的存储库集合,但没有看到任何存储库提交了他们的 vendors 目录,所以我想这可能是一个备受争议的话题,无论哪种方式都有其优点。
答案 3 :(得分:0)
我不承诺提供充足的资源。因为在这种情况下,许多提交消息随着供应商的变化而膨胀。当我想要更新时,我会这样做,然后提交更新的Gopkg.*
。