Skip to content

head/base 축: 브랜치와 태그가 동명이면 태그가 이겨 엉뚱한 diff가 조용히 나온다 #73

Description

@say8425

증상

같은 이름의 브랜치와 태그가 함께 있으면 피커에서 브랜치를 골라도 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을 붙인다.

범위

제안하는 해법

/api/refs가 이미 kind를 알고 있으므로 wire에 전체 refname을 싣는다 (refs/heads/<n> / refs/remotes/<n> / refs/tags/<n>). 그러면 git 해석이 애초에 모호해지지 않는다.

함께 움직여야 하는 것들:

  • server/refs.ts%(refname) 을 그대로 싣기
  • browser/refPicker/model.tsvalue는 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) 모호성을 다룬다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions