증상
같은 이름의 브랜치와 태그가 함께 있으면 피커에서 브랜치 를 골라도 git이 태그 로 해석한다. 경고는 stderr로 나가는데 모든 git 호출이 2>/dev/null + .nothrow()라 삼켜지므로, 사용자에게는 에러 없이 엉뚱한 내용 (대개 빈 화면)이 보인다.
실측:
$ git rev-parse dup
warning: refname 'dup' is ambiguous.
5cc67d3f... ← 태그
$ git rev-parse refs/heads/dup
0eb61e8b... ← 브랜치 (다른 커밋)
$ git diff --name-only main dup --
(빈 출력 + ambiguous 경고)
$ git diff --name-only main refs/heads/dup --
b.txt
c.txt ← 실제로 봐야 할 내용
재현 픽스처: 브랜치 dup을 만들어 커밋하고, main에서 태그 dup을 붙인다.
범위
기존 문제다. base 축(base=<ref>)에도 있었고, head 축(feat: 툴바에 지금 보고 있는 워크트리와 브랜치를 표시한다 #72 )이 노출을 넓혔다.
조건이 좁다 — 같은 이름의 브랜치와 태그가 동시에 존재해야 한다.
위험도: 조용히 틀린 답. CLAUDE.md의 "고르지도 않은 기준의 diff가 에러보다 나쁘다"에 해당한다.
제안하는 해법
/api/refs가 이미 kind를 알고 있으므로 wire에 전체 refname 을 싣는다 (refs/heads/<n> / refs/remotes/<n> / refs/tags/<n>). 그러면 git 해석이 애초에 모호해지지 않는다.
함께 움직여야 하는 것들:
server/refs.ts — %(refname) 을 그대로 싣기
browser/refPicker/model.ts — value는 full refname, label은 짧은 이름 유지
browser/repoLabel.ts — 툴바 표시는 짧은 이름으로 되돌려야 한다 (refs/heads/feat/x 를 그대로 보여주면 안 된다)
URL 공유 모양이 길어진다 (?head=refs/heads/feat/x) — 받아들일지 판단 필요
verifyBaseRef의 - 컷은 그대로 유지
회귀망: 동명 브랜치/태그 픽스처
왜 #72에서 안 했나
#72는 이미 16커밋이고, 이 변경은 wire·피커 모델·툴바 표시·테스트가 함께 움직인다. 별도 PR이라야 그 변경만 온전히 리뷰받을 수 있다.
참고
git diff 끝의 -- 구분자(경로와 이름이 겹치는 브랜치 문제)는 #72에서 이미 고쳤다. 이 이슈는 그것과 다른 모호성이다 — --는 rev/path 모호성을, 이것은 rev 종류(branch/tag) 모호성을 다룬다.
증상
같은 이름의 브랜치와 태그가 함께 있으면 피커에서 브랜치를 골라도 git이 태그로 해석한다. 경고는 stderr로 나가는데 모든 git 호출이
2>/dev/null+.nothrow()라 삼켜지므로, 사용자에게는 에러 없이 엉뚱한 내용(대개 빈 화면)이 보인다.실측:
재현 픽스처: 브랜치
dup을 만들어 커밋하고,main에서 태그dup을 붙인다.범위
base=<ref>)에도 있었고, head 축(feat: 툴바에 지금 보고 있는 워크트리와 브랜치를 표시한다 #72)이 노출을 넓혔다.제안하는 해법
/api/refs가 이미kind를 알고 있으므로 wire에 전체 refname을 싣는다 (refs/heads/<n>/refs/remotes/<n>/refs/tags/<n>). 그러면 git 해석이 애초에 모호해지지 않는다.함께 움직여야 하는 것들:
server/refs.ts—%(refname)을 그대로 싣기browser/refPicker/model.ts—value는 full refname,label은 짧은 이름 유지browser/repoLabel.ts— 툴바 표시는 짧은 이름으로 되돌려야 한다 (refs/heads/feat/x를 그대로 보여주면 안 된다)?head=refs/heads/feat/x) — 받아들일지 판단 필요verifyBaseRef의-컷은 그대로 유지왜 #72에서 안 했나
#72는 이미 16커밋이고, 이 변경은 wire·피커 모델·툴바 표시·테스트가 함께 움직인다. 별도 PR이라야 그 변경만 온전히 리뷰받을 수 있다.
참고
git diff끝의--구분자(경로와 이름이 겹치는 브랜치 문제)는 #72에서 이미 고쳤다. 이 이슈는 그것과 다른 모호성이다 —--는 rev/path 모호성을, 이것은 rev 종류(branch/tag) 모호성을 다룬다.