You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何迁移至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
    fi
    
    最后给脚本和钩子文件添加执行权限:chmod +x scripts/auto_migrate.sh .git/hooks/post-checkout

生成对应分支状态的迁移文件/恢复方案

如果需要将数据库恢复到当前分支的对应状态,或者重新生成干净的迁移文件,可以按以下步骤操作:

  • 用python manage.py makemigrations --dry-run预览即将生成的迁移内容,确认无误后再正式执行生成命令
  • 若迁移记录混乱需要重置:
    1. 务必先备份数据库! 这是不可省略的操作
    2. 删除所有应用下migrations目录内的文件(保留__init__.py)
    3. 执行python manage.py makemigrations重新生成全量迁移文件
    4. 用python manage.py migrate --fake-initial标记这些迁移为已执行,避免重复创建数据库表
  • 遇到跨分支迁移冲突时,合并分支前先在本地测试迁移兼容性,必要时手动调整迁移文件的依赖顺序

实用优化建议

  • 给每个迁移文件添加清晰注释,明确记录变更内容,后续排查问题时一目了然
  • 维护一份迁移日志,记录各分支的迁移变更点,避免跨分支切换时混淆状态
  • 使用--app参数单独处理指定应用的迁移,比如python manage.py migrate myapp,减少全局迁移的执行时间和复杂度

内容的提问来源于stack exchange,提问作者hl037_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:15:36