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

时间:2017-11-17 08:53:32

标签: go

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

4 个答案:

答案 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 作为其项目引导的一部分。

虽然在某些环境中提交它可能很诱人,但它会导致一些问题:

  • 大型 VCS 存储库大小和更新代码时的差异。
  • 复制您自己的 VCS 中所有依赖项的历史记录。
  • 将通过 git 安装的依赖项添加到 git repo 会将它们显示为子模块。这是有问题的,因为它们不是真正的子模块,您会遇到问题。

如果你真的觉得你必须这样做,你有几个选择:

  • 限制自己安装标记版本(无开发版本),以便您只能获得压缩安装,并避免 git“子模块”出现问题。
  • 在您的配置中使用 --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 之前从磁盘中删除这些依赖项。
  • 添加 .gitignore 规则 (/vendor/**/.git) 以忽略所有供应商 .git 文件夹。这种方法不需要您在运行 Composer 更新之前从磁盘中删除依赖项。

为了支持这个论点,我查看了 CocoaPods 提供的存储库集合,但没有看到任何存储库提交了他们的 vendors 目录,所以我想这可能是一个备受争议的话题,无论哪种方式都有其优点。

答案 3 :(得分:0)

我不承诺提供充足的资源。因为在这种情况下,许多提交消息随着供应商的变化而膨胀。当我想要更新时,我会这样做,然后提交更新的Gopkg.*