每次svn更新后我都被迫做作曲家更新

时间:2014-08-27 08:52:58

标签: svn laravel composer-php

如何解决问题,当使用laravel框架处理同一项目的几个开发人员有不同的本地laravel/vendor/composer/*文件时?

想象一下,我们有一个生产服务器,我们不再运行作曲家了(或者我们应该?)。要将所有文件投入生产,开发人员必须在本地执行composer update,因此laravel会动态创建/更改文件夹vendor/composer/中的文件。比开发人员将这些文件提交到生产环境并且有效。

但在我的同事提交后,我想更新我的svn。这意味着它还将更新动态创建的文件,这些文件将错过例如我当前的工作更改。所以我必须在我的本地实例上运行composer update来实现同事的更改,并且还包括我当前的(仍然是非提交的)更改。

这是一个正常的好习惯,在每次svn更新后总是在localhost上运行composer update吗?

2 个答案:

答案 0 :(得分:1)

很多问题,但我想我明白你的问题是什么。

首先确保您没有控制供应商目录版本。 composer.json和composer.lock都应该受版本控制。

如果有人通过编辑器安装了新的软件包,那么所有其他开发人员都应该安装" composer install"获得新代码后。

在制作中,您始终运行" composer install&#34 ;, never" composer update"。

"作曲家更新"应该以受控方式运行,因为它的作用是使用新版本更新所有包(根据composer.json设置)。

答案 1 :(得分:1)

  

想象我们有一个生产服务器,我们不再运行作曲家(或者我们应该?)。

您应该在生产服务器上运行以下命令以部署新代码:

php artisan down
git pull origin master
composer install
php artisan migrate
php artisan up

你应该有' composer.lock'包含在您的版本控制中,以便所有开发人员(和生产服务器)使用相同版本的/ vendor文件

  

运行作曲家是否存在安全风险?

绝对不是 - 这是标准做法(假设你有composer.lock)。 Composer.lock确保您的服务器获得完全相同的文件。如果您查看composer.lock内部,您会看到诸如

之类的项目
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cde7a00d1410a17fb6d61b993cb017a78be1137c",

如果一个有胆量的人要添加新版本的软件包,它就不会有相同的散列拉链位置 - 所以你仍然会收到你期望的正确版本。