在我的应用程序中,使用Laravel 5.1构建,我有一个分支开发。
我必须实现2个新功能,所以我创建了第一个分支(从dev开始)需要2个表(所以新的迁移),然后,当我完成它时,我创建了第二个分支(开始使用dev)并且这个功能需要一个不同的表所以新的迁移。
所以我的情况是这样的:
branch 1 -> migration1
branch 2 -> migration2, migration3
但是现在我需要更改(很多列)与branch1相关的表,所以我应该回滚迁移,因为我不会进行新的迁移以进行更改,但我会回滚迁移并重新创建。
但我现在的问题是,如果我在branch1中返回并尝试:
php artisan:migrate rollback
最新的迁移(在我的数据库中)是branch2(migration2,migration3)的表,而不是与branch1(migration1)相关的表。
那么在许多分支之间管理迁移的正确方法是什么?
当我在一个更大的项目中创建一个新的分支时。例如,启动重构时。我创建了数据库的副本,并使用分支名称为此副本添加前缀。当切换回当前的主服务器或生产分支以快速修复错误时,这可以省去许多令人头疼的问题,...这样您就不会像在问题中描述的那样发生任何迁移冲突。
切换分支时,我更新了我的.env
数据库名称,并清除了应用程序的缓存。这样,Laravel就会开始使用与您的应用程序/迁移所处的状态相对应的数据库。
php artisan config:cache
php artisan config:clear
php artisan cache:clear
我建议创建一个数据库表的副本,并在.env
文件中表示它们:
DB_DATABASE_BRANCH=branchtable
DB_DATABASE=mastertable
然后切换到您的分支并将config/database.php
数据库驱动程序更改为DB_DATABASE_BRANCH
'database' => env('DB_DATABASE_BRANCH', 'forge'),
由于git会跟踪config/database.php
,因此在使用git checkout ***
时会自动切换数据库。这是Odyssee的解决方案更好,因为无论何时切换分支,都不需要触摸.env
文件。
查看我的blog post了解更多详情。