django项目git分支应带环境、模块、意图等上下文,如dev-2024q3-api-auth-refactor;长期分支需对应settings.py配置开关;main必须受保护并校验migrations;跨分支同步migration需用showmigrations和migrate--plan;settings.py须分层拆解、禁硬编码、通过环境变量驱动;pre-commit应集成manage.py check--deploy并避开migrations文件格式化。

Git 分支怎么命名才不会在 Django 项目里翻车
别用 feature/login 或 fix-bug 这种模糊命名——Django 项目常含多环境(dev/staging/prod)、多服务(API + admin + celery)、多部署形态(Docker vs bare metal),分支名得带上下文。
-
dev-2024q3-api-auth-refactor:标明阶段、模块、意图,避免和hotfix-prod-500-error混淆 - 所有长期分支(如
release/1.4)必须对应明确的settings.py配置开关(比如DEBUG = False+ALLOWED_HOSTS白名单) - 禁止直接 push 到
main;Django 的 migrations 一旦合入就不可逆,main必须受保护,且 CI 要校验python manage.py makemigrations --check
Django migrations 在不同分支间同步时为啥总报错
根本原因是 migrations 文件不是纯代码,它隐含执行顺序依赖。当你在 dev 分支写了 0002_add_user_profile.py,而 staging 分支还停在 0001_initial.py,直接 merge 就会触发 InconsistentMigrationHistory。
- 每次切分支前先跑
python manage.py showmigrations,确认当前迁移状态是否“干净” - 跨分支合并 migration 时,优先用
python manage.py migrate --plan看执行路径,而不是直接migrate - 如果出现冲突(比如两个分支都新增了
0002_*.py),不要手动改序号——用python manage.py makemigrations --empty your_app生成空文件,再手写dependencies = [('your_app', '0001_initial')]和operations = [],最后migrate
settings.py 怎么管才不被 Git 搞乱
settings.py 本身不能进 Git,但它的结构可以——关键是把配置拆成三层:公共骨架 + 环境变量驱动 + 本地覆盖。
部署一个包含 4 个智能体(agent)的数字孪生平台。在以下情况下使用该技能: 1. 用户希望为物理资产监控与预测性维护等场景搭建数字孪生系统……
- 删掉所有硬编码密码、密钥、数据库地址;统一走
os.environ.get('DB_URL'),并在.env(gitignored)里配值 - 保留
base.py(通用配置)、dev.py、prod.py,用from .base import *继承,再覆盖关键项(如DEBUG、LOGGING) - CI/CD 中禁止用
--settings=myproject.settings.prod直接指定文件——改用DJANGO_SETTINGS_MODULE=myproject.settings.prod,否则manage.py的自动检测逻辑会失效
为什么 pre-commit 钩子在 Django 项目里经常失效
因为默认钩子只检查 Python 语法,但 Django 项目真正容易出问题的是 models.py 字段变更没配 migration、urls.py 正则写错、或 TEMPLATES 配置漏了 APP_DIRS=True。
- 加一条
pre-commit检查:运行python manage.py check --deploy,它会揪出生产环境禁用的配置(比如未设SECURE_HSTS_SECONDS) - 禁止用
black格式化migrations/*.py——Django 生成的 migration 文件有固定结构,格式化后可能破坏dependencies字段的缩进语义 - 在
.pre-commit-config.yaml里给django-check加files: ^myproject/(models|views|urls)\.py$,避免扫描整个项目拖慢提交
最麻烦的从来不是写分支策略,而是让每个开发者都意识到:makemigrations 是一次协作承诺,不是本地命令;settings.py 不是配置文件,是环境契约;Git 提交记录里混进一个没测过的 migration,比少写十个单元测试影响更直接。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










