본문 바로가기
C.W.K.
Stream
Lesson 05 of 05 · published

Tag와 release history

~16 min · tag, release

Level 0추적 전 새싹
0 XP0/47 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Tag는 한 순간을 고정하고 release는 metadata를 더해

Branch는 움직이지만 tag는 움직이지 않아. Tag는 특정 commit에 붙인 이름이고 한 번 정하면 pointer가 영원히 바뀌지 않아. 대표적인 용도는 release야. ship한 commit에 v2.4.0 tag를 붙이면 누구나 나중에 git checkout v2.4.0으로 정확히 그 운영 release 자리로 갈 수 있어. 고객이 'v2.3.7에서' bug를 재현했다고 할 때 몇 초 안에 같은 상태를 열 수 있지.

중요한 type은 둘이야. Lightweight tag(git tag v2.4.0)는 metadata 없는 pointer file이고, annotated tag(git tag -a v2.4.0 -m "Release 2.4.0")는 author, 날짜, message, 선택적인 GPG 서명을 가진 온전한 Git object야. 실제 release에는 annotated tag를 써. 서명은 권한 있는 사람이 만든 release인지 확인하고 message는 audit trail이 되며, git describe는 v2.4.0-12-g3f4a5d6처럼 사람이 읽을 수 있는 commit ID를 만들어.

git push --tags는 tag를 remote로 보내. plain git push에는 tag가 포함되지 않는다는 점을 놓치기 쉬워. git config --global push.followTags true를 두면 push하는 commit을 가리키는 tag가 일반 push를 따라가. git tag -d <name>은 로컬 tag를, git push origin --delete <name>은 remote tag를 지워. 다만 remote tag 삭제는 거의 옳지 않아. 이미 fetch한 사람의 머신에는 여전히 남기 때문이야.

GitHub Releases는 annotated tag에 UI를 더해 release note, tarball이나 binary 같은 asset, pre-release 표시를 제공해. CLI에서는 gh release create v2.4.0 --notes "..."로 만들 수 있고 tag를 push한 뒤 web UI를 써도 돼. semantic-release와 Conventional Commits를 결합하면 release가 merge의 자동 결과가 되어 사람이 매번 release note를 쓰지 않아도 돼.

Code

Release 용 annotated tag·bash
# HEAD 에 annotated, signed tag:
git tag -a v2.4.0 -m "Release 2.4.0 — OAuth2 GitHub login" -s

# 특정 commit 에:
git tag -a v2.4.0 abc1234 -m "..."

# Tag list:
git tag --list 'v2.*'             # glob 필터

# Tag metadata 보기:
git show v2.4.0

# Tag push (plain git push 로는 안 됨):
git push origin v2.4.0
git push --tags                   # 모든 tag

# 같은 tip 가리키는 tag 가 일반 push 따라오게:
git config --global push.followTags true
gh 통한 GitHub Releases·bash
# Tag + GitHub release 한 번에:
gh release create v2.4.0 \
  --title "v2.4.0 — OAuth2 GitHub login" \
  --notes-file CHANGELOG-2.4.0.md \
  --target main

# Build 산출물 첨부:
gh release upload v2.4.0 dist/myapp-2.4.0.tar.gz

# Pre-release 표시:
gh release create v2.5.0-beta.1 --prerelease --generate-notes

# git describe — 가장 최근 tag + offset:
git describe --tags
# 출력 예: v2.4.0-12-g3f4a5d6
# v2.4.0 후 12 commit, 현재 short hash 3f4a5d6 의미

External links

Exercise

실제 repo의 HEAD에 의미 있는 message로 annotated tag 하나를 만들고 git push origin <tag>로 올려. GitHub의 Releases 또는 Tags에 보이는지 확인하고 git describe --tags의 출력 형식을 읽어. global push.followTags = true도 설정해. 가능하다면 과거 이력에서 뒤늦게라도 tag할 가치가 있는 순간 하나를 적어봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.