在我的应用程序中,使用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)相关的表。
那么在许多分支之间管理迁移的正确方法是什么?
答案 0 :(得分:1)
当我在较大的项目中创建新分支时。例如,当开始重构时。我创建数据库的副本,并在此副本之前添加分支名称。切换回当前的主分支或生产分支以快速修复错误时,这可以省去很多麻烦。...这样,您将永远不会遇到问题中所述的任何迁移冲突。
切换分支时,我会更新.env
数据库名称,并清除应用程序的缓存。这样Laravel就开始使用与您的应用程序/迁移所处的状态相对应的数据库。
php artisan config:cache
php artisan config:clear
php artisan cache:clear
答案 1 :(得分:0)
我建议创建数据库表的副本,并在您的.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以获得更多详细信息。