【问题标题】:SVN Repo in vendor with Composer供应商中的 SVN Repo 与 Composer
【发布时间】:2013-12-17 07:22:45
【问题描述】:
目前,我在我的供应商目录中签出了一个私有 SVN 存储库,它与 Composer 一起使用。它工作得很好,但只要我不改变/提交东西。当我composer update 提交对 SVN 存储库的更改后,我得到了明确的message that my way of working is not recommended,以及我的 .svn 目录丢失的消息。 (缺少 .svn 目录可能是因为我从一个 repo 中检出了多个供应商包)
我知道,在供应商目录中直接结帐并不是最佳做法。但它感觉相当舒服(如果它当然有效)。现在,由于我不是一个喜欢坚持不良做法的人,所以我想对此进行改进。
Composer 的建议只给了我一些关于如何让供应商目录中的 SVN 运行的示例,而且“最佳实践”这句话对我来说也不是很清楚。此外,this post 也没有真正的帮助,因为我没有收到 Seldaek 所展示的信息。
我的问题是,用 SVN 管理供应商的正确方法是什么?
【问题讨论】:
标签:
php
svn
dependencies
composer-php
dependency-management
【解决方案1】:
推荐的方法是只提交composer.lock 和composer.json 文件。这使您的存储库轻量级,因为您不必提交构成所包含库的所有文件。如果您致电 composer install,Composer 承诺会安装完全相同的文件。
它的工作方式是将所有包含的供应商文件实际提交到您的项目存储库中。我在一些项目中这样做是因为除了将所有内容都放在存储库中之外,还没有办法部署这些项目。好的部分是每个签出或更新存储库的人都会立即拥有该软件的工作副本。不好的部分是,一旦从存储库中导出依赖项,您就有一个更复杂的更新和提交过程,因为您必须手动删除外部存储库的所有标志(例如 .git 目录 - 您不需要如果您使用 git 作为 repo,则希望拥有 git 子模块,并且如果您使用 SVN,则不想提交完整的 git 历史记录) - 这与从 SVN 签出的库的方式相同。
如果不创建一个更新脚本来完成将依赖项提交到存储库所需的一切,除非强制执行,否则您将永远不会更新您的软件。在不提交依赖项的情况下,更新就像调用 composer update 然后提交 composer.json 和 composer.lock 中的更改一样简单。
如果依赖项不在项目存储库中,它们如何部署到生产服务器?在将文件复制到生产系统之前,请致电 composer install。 :)