如何迁移至Git历史提交版本中的Django模型?
Django多分支多应用数据库迁移自动化方案
自动化分支切换后的迁移流程
切换分支后手动处理迁移确实繁琐,直接搞一套自动化流程就能解决:
- 先执行
python manage.py migrate --plan预览要执行的迁移操作,避免盲目执行导致数据库异常 - 写个简单的shell脚本封装完整流程:
#!/bin/bash echo "检测当前迁移状态..." python manage.py showmigrations echo "开始执行迁移..." python manage.py migrate echo "迁移完成,当前状态:" python manage.py showmigrations - 结合Git的
post-checkout钩子,实现分支切换后自动触发迁移:
在项目根目录的.git/hooks/post-checkout文件中添加以下内容:
最后给脚本和钩子文件添加执行权限:#!/bin/bash # 仅在分支切换时触发(排除单个文件checkout场景) if [ $3 = 1 ]; then ./scripts/auto_migrate.sh fichmod +x scripts/auto_migrate.sh .git/hooks/post-checkout
生成对应分支状态的迁移文件/恢复方案
如果需要将数据库恢复到当前分支的对应状态,或者重新生成干净的迁移文件,可以按以下步骤操作:
- 用
python manage.py makemigrations --dry-run预览即将生成的迁移内容,确认无误后再正式执行生成命令 - 若迁移记录混乱需要重置:
- 务必先备份数据库! 这是不可省略的操作
- 删除所有应用下
migrations目录内的文件(保留__init__.py) - 执行
python manage.py makemigrations重新生成全量迁移文件 - 用
python manage.py migrate --fake-initial标记这些迁移为已执行,避免重复创建数据库表
- 遇到跨分支迁移冲突时,合并分支前先在本地测试迁移兼容性,必要时手动调整迁移文件的依赖顺序
实用优化建议
- 给每个迁移文件添加清晰注释,明确记录变更内容,后续排查问题时一目了然
- 维护一份迁移日志,记录各分支的迁移变更点,避免跨分支切换时混淆状态
- 使用
--app参数单独处理指定应用的迁移,比如python manage.py migrate myapp,减少全局迁移的执行时间和复杂度
内容的提问来源于stack exchange,提问作者hl037_
相关产品推荐
相关产品推荐

