为什么需要将 django 迁移推送到版本控制系统
Why there is need to push django migrations to version control system
这是一种常见的做法,从事 django 项目的人通常会将迁移与其他代码一起推送到版本控制系统。
我的问题是为什么这种做法如此普遍?为什么不直接推送更新的模型,让每个人都在本地生成迁移。这种方法也可以减少解决迁移冲突的工作量。
首先,版本控制中的迁移允许您在生产环境中运行它们。
其次,迁移并不总是自动生成。例如,如果您向模型添加一个新字段,您可能会编写一个迁移来填充该字段。无法从模型重新创建该迁移。如果该迁移不在版本控制中,那么其他人将无法 运行 它。
迁移将数据库状态与代码状态同步。如果您不将迁移签入到版本控制中,就会丢失中间步骤。您将无法返回版本控制历史记录,只能返回 运行 代码,因为数据库与那个时间点的模型不匹配。
迁移与任何代码一样,应该进行测试,至少在基本级别上进行测试。即使它们是自动生成的,也不能保证它们 100% 有效。所以安全的方法是在你的开发环境中创建迁移,测试它们,然后将它们推送到生产环境以在那里应用它们。
如果您不将它们提交到 VCS,那么人们会对模型做出可能存在冲突的更改。
当最终准备好部署时,您仍然需要 django 进行新的迁移,然后将每个人的更改合并在一起。这只会创建一个额外的不必要步骤,可能会引入错误。
您还假设每个人都将始终能够处理最新版本的代码,而当您开始处理尚未准备好合并到主线的分支时,这并不总是可能的。
这是一种常见的做法,从事 django 项目的人通常会将迁移与其他代码一起推送到版本控制系统。
我的问题是为什么这种做法如此普遍?为什么不直接推送更新的模型,让每个人都在本地生成迁移。这种方法也可以减少解决迁移冲突的工作量。
首先,版本控制中的迁移允许您在生产环境中运行它们。
其次,迁移并不总是自动生成。例如,如果您向模型添加一个新字段,您可能会编写一个迁移来填充该字段。无法从模型重新创建该迁移。如果该迁移不在版本控制中,那么其他人将无法 运行 它。
迁移将数据库状态与代码状态同步。如果您不将迁移签入到版本控制中,就会丢失中间步骤。您将无法返回版本控制历史记录,只能返回 运行 代码,因为数据库与那个时间点的模型不匹配。
迁移与任何代码一样,应该进行测试,至少在基本级别上进行测试。即使它们是自动生成的,也不能保证它们 100% 有效。所以安全的方法是在你的开发环境中创建迁移,测试它们,然后将它们推送到生产环境以在那里应用它们。
如果您不将它们提交到 VCS,那么人们会对模型做出可能存在冲突的更改。
当最终准备好部署时,您仍然需要 django 进行新的迁移,然后将每个人的更改合并在一起。这只会创建一个额外的不必要步骤,可能会引入错误。
您还假设每个人都将始终能够处理最新版本的代码,而当您开始处理尚未准备好合并到主线的分支时,这并不总是可能的。