dev2 · 2026-08-20 · 【实测】= 本机命令跑出来的
发生产批1 时,cherry-pick 全过、release 分支已推上 Codeup,但建 MR 返 HTTP 500。
分支: release/mr-381-382-...-419-477-20260820021400
SHA : 5218d0518060ef0a4d2f2dd67f4506816ff37d86
报错: ❌ Codeup MR 创建失败:HTTP Error 500: Internal Server Error
【实测】分支确实在 Codeup 上(mirror 回流已见到该 ref)。
我查不了 MR 是否已创建 —— 手上 release-pipeline-status 用的是纯只读 flow 令牌、
不含 MR 权限;Codeup 令牌在你那儿。
不敢盲目重试:台账记着「Codeup 500 会吞 webhook,合并 API 500 先查 MR 状态」。
500 不等于没建成,猜错就是两个内容相同的生产 MR挂着,谁合谁不知道。
【实测】
改动面: 121 提交 / 101 文件(结算 93 + 核心 8)
核心 alembic heads: 1 个 (phase70_002_merge_heads) ← 并头生效,流水线不会再红
结算 alembic heads: 1 个 (phase68_003_store_closed) ← 批1 到此为止,正常
env.py 排除清单: service_prices / service_price_changes / payment_orders 三张都已登记
夹带第2批内容: 0
【实测】生产未受影响:origin/main 仍 ec0e6a49,main 流水线无新 run。
我原来的筛法是「动了 settlement/ 目录才算结算 MR」——
这个筛法漏掉了功能上属于结算、但只改核心文件的 MR:
| 补进来 | 标题 | 不发的后果 |
|---|---|---|
| #390 | fix(batchA): 价格表登记进核心 autogenerate 排除清单 |
🔴 价格表没进排除名单,可能被 autogenerate 误删(即台账记的「autogenerate 会 DROP 45 张表」高危) |
| #458 | fix: 补齐核心后台「客服设置」菜单入口 |
结算客服设置页上线了,但核心后台看不到入口 |
| #459 | fix: HREF_TO_MENU_KEY 补客服设置映射 |
#458 的补丁,必须同发 |
【实测】判据:
改过 migrations/env.py 的 MR: #392(在清单) #390(不在清单!) + 1 个无号
核心后台客服设置页由 MR#458 带(动结算文件 0 个 → 被我的筛法排除)
结算侧客服设置页在 MR#456/#457(在清单)
⚠️ #390 的缺失还是 cherry-pick 冲突的直接原因 ——
少了批A 那步,批B 对 env.py 的改动落不到预期上下文,冲突在 migrations/env.py。
补上 #390 后按号顺序 pick,冲突消失(【实测】第二次跑 cherry-pick 全过)。
批1(40 个 · 已推分支,卡在建 MR): 381~419 全部 + 477(并头)
批2(33 个 · 未开始): 420~430 · 432 433 436 438 440 441
456 457 458 459 462 464~469 471~475
合计 73 = 原 69 + #390 + #458 + #459 + 并头 #477
第一次尝试 70 个 MR 一起发,炸在建分支这步:
fatal: cannot lock ref 'refs/heads/release/mr-381-...-477-20260820020628':
Unable to create '....lock': File name too long
【实测】分支名 305 字符,文件系统单组件上限 255 字节。对照组:短名字可建。
工具用所有 MR 号拼分支名,所以一次最多约 56 个 MR(255 − 前缀 11 − 时间戳 15 − .lock 5,
每个三位号占 4 字符)。超了就静默炸在建分支,报错信息不提这是数量问题。
建议:分支名超长时改用哈希或首尾号+计数(如 release/mr-381to477-40n-<时间戳>),
把完整 MR 列表写进 MR 描述。
nginx -t && nginx -s reload(本批含 settlement/deploy/nginx-settlement.conf)云机环境 · 非验收证据。