这是一种常见的做法,使用django项目的人通常会将迁移推送到版本控制系统以及其他代码。
我的问题是为什么这种做法如此常见?为什么不推送更新的模型,每个人都在本地生成迁移。这种方法也可以减少解决迁移冲突的工作量。
答案 0 :(得分:10)
如果您没有将它们提交给VCS,那么会发生什么情况,人们会对模型进行潜在的冲突更改。
当最终准备部署时,您仍然需要django进行新的迁移,然后将每个体系变化合并在一起。这只是创建了一个额外的不必要的步骤,可以引入错误。
您还假设每个人都将能够处理最新版本的代码,当您开始处理尚未准备好合并到主线的分支时,这些代码并不总是可行。
答案 1 :(得分:7)
迁移会将数据库的状态与代码的状态同步。如果您没有检查迁移到版本控制中,则会丢失中间步骤。您无法返回版本控制历史记录并只运行代码,因为数据库在该时间点与模型不匹配。
迁移与任何代码一样,至少应该在基本级别上进行测试。尽管它们是自动生成的,但这并不能保证它们能够100%的时间工作。因此,安全的方法是在开发环境中创建迁移,测试它们,然后将它们推送到生产环境以在那里应用它们。
答案 2 :(得分:2)
首先,版本控制中的迁移允许您在生产中运行它们。
其次,并不总是自动生成迁移。例如,如果向模型添加新字段,则可以编写迁移以填充该字段。无法从模型重新创建迁移。如果该迁移不在版本控制中,那么其他任何人都无法运行它。