文档订正:远程状态认知纠错(refs/remotes 写入不落盘)+ 交接清单过期基线
T-8/T-9 提交时两次依据 git branch -r / branch -vv 判定「远程分支不见了」并向用户报警, 两次均为误报。本次深挖确认根因,并订正此前写入的错误表述。 - docs/memory/MEMORY.md 交接清单第 7 问重写: 本仓 .git/refs/remotes/** 写入不落盘 —— git update-ref refs/remotes/origin/X 返回 0、 reflog 也建了,但松散引用消失,且会把整个 refs/remotes/origin/ 目录删掉(含手工放进的文件); git fetch 报告 [new branch] ... -> origin/risk-control-agent 后同样不落盘。 故此前记的「stale tracking ref,git fetch 即恢复」是错的,fetch 并不修复。 对照证据:写 refs/heads/** 完全正常;同一 git(2.55.0.windows.3)在 /tmp 新建仓库里写 refs/remotes/** 完全正常 → 只此仓库特有;已排除外部进程删目录(marker 静置存活)、 重解析点(lstat FILE_ATTRIBUTE_REPARSE_POINT=False)、hooks / commondir / 浅克隆。 补绕过方案:packed-refs 是可靠存储,手工追加 <sha> refs/remotes/origin/<name> 后 git branch -r 立即正常(还原=删掉该行)。 补影响面:提交 / fetch 抓对象 / push 均不受影响(git push --dry-run 实测 fffb78a..d0097d6 成功),仅影响本地显示与上游跟踪。 顺手订正验证条目里过期的「516 passed / 3 skipped」→ 697,及第 73 行同款旧表述。 - docs/memory/2026-09-10.md 追加排查记录:7 条可复现证据 + 三步对照实验 + 绕过方案 + 影响面。
This commit is contained in:
@@ -388,3 +388,45 @@ T-11(`core_tools` 与 `sum_trades_on_date` 汇总去重 · 依赖 T-8 已解
|
||||
skill `design-doc-selfcheck` → **v1.2.0**:新增 **「二补 · 格式契约最低三问」** + **铁律 6(格式契约铁律)**:
|
||||
**凡 `str(Decimal)` 直接出网的字段,先问「这个字段的展示位数写在哪」—— 没答案就是契约缺位;
|
||||
存储精度 ≠ 展示精度;多条产出路径必须共用一个格式出口 + 写逐字节相等断言。**
|
||||
|
||||
---
|
||||
|
||||
## 深夜 · 收尾:**`refs/remotes` 写入不落盘**根因排查(推翻此前「stale ref」结论)
|
||||
|
||||
**背景**:提交 T-8/T-9 时两次依据 `git branch -r` / `git branch -vv` 判定「远程分支不见了」并报警,
|
||||
两次均**误报**(用户被迫去仓库核实两次)。用户指令:「你先改问题……改完确认没问题再提交」→ 先做根因排查。
|
||||
|
||||
### 已确认事实(可复现)
|
||||
|
||||
| # | 事实 | 证据 |
|
||||
| --- | --- | --- |
|
||||
| 1 | **远程健在** | `git ls-remote --heads origin` → `refs/heads/risk-control-agent` = `fffb78a`;另有 6 个分支 |
|
||||
| 2 | **fetch 抓取正常,引用不落盘** | `git fetch origin` 报 `* [new branch] risk-control-agent -> origin/risk-control-agent`,`FETCH_HEAD` 写对;`.git/refs/remotes/` 仍为空 |
|
||||
| 3 | **写 remotes 会删整个 `origin` 目录** | `git update-ref refs/remotes/origin/X <sha>` → **EXIT=0**、reflog 建了,但松散引用消失,**连手工 `echo >` 进去的文件一起被删** |
|
||||
| 4 | **只 remotes namespace 有问题** | 写 `refs/heads/tmpX` 时,放在 `refs/remotes/origin/` 的 marker **存活**;写 remotes 才触发删除 |
|
||||
| 5 | **只此仓库特有** | 同一 git(`2.55.0.windows.3`)在 `/tmp` 新建仓库写 `refs/remotes/origin/probeX` **完全正常** |
|
||||
| 6 | **排除外部进程** | marker 静置 6 秒 + 跑只读 git 命令均存活,**只有写 remotes 的那一下才被删** |
|
||||
| 7 | **排除目录属性** | Python `lstat` 查 `refs/remotes`:**非重解析点**(`FILE_ATTRIBUTE_REPARSE_POINT = False`);无 hooks、无 commondir、非浅克隆 |
|
||||
|
||||
**根因未定位**(倾向 git 写 remotes 引用时被本地环境干预)。**此前的记录写「stale ref,`git fetch` 即恢复」是错的** —— fetch 并不修复。
|
||||
|
||||
### ✅ 绕过方案(已验证)
|
||||
|
||||
`.git/packed-refs` 是**可靠存储**(`origin/dev`、`origin/main` 一直从这里读到)。
|
||||
手工追加 `fffb78a11c7d4e05f2aae53c76ceec3ad5d7d33c refs/remotes/origin/risk-control-agent` 后:
|
||||
`git branch -r` 立即显示 `origin/risk-control-agent`、`git rev-parse` 可解析。还原 = 删掉该行。
|
||||
|
||||
### 影响面(重要)
|
||||
|
||||
- **不受影响**:提交(`refs/heads/**` 正常)、`git fetch` 抓对象、**push**
|
||||
(`git push --dry-run origin risk-control-agent:refs/heads/risk-control-agent` 实测 `fffb78a..d0097d6` 成功)。
|
||||
- **受影响**:仅本地「显示 / 上游跟踪」——`git branch -r`、`git branch -vv`、`git pull`(无参) 的默认上游推断。
|
||||
|
||||
### 状态
|
||||
|
||||
本地 HEAD `d0097d6`(T-9)· 领先远程 `fffb78a` **9 个提交** · 工作区干净 · 探针与临时文件已全部清理。
|
||||
|
||||
### 文档回写
|
||||
|
||||
`.workbuddy/memory/MEMORY.md`(远程铁律条**重写**,含 7 条证据 + 绕过方案)·
|
||||
`docs/memory/MEMORY.md`(交接清单**第 7 问重写** + 顺手订正验证条目里过期的「516 passed」→ **697** + 第 73 行旧表述订正)· 本条。
|
||||
|
||||
Reference in New Issue
Block a user