C.W.K.
Stream
Lesson 05 of 05 · published

Tag와 release history

~16 min · tag, release

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

Tag 가 순간을 핀, release 는 metadata 있는 tag

Branch 는 움직이고 tag 는 안 움직여. Tag 는 특정 commit 하나의 이름, 한 번 설정되면 pointer 영원히 안 바뀜. 사용 사례는 release: ship 한 commit 에 v2.4.0 tag, 그 후 영원히 누구나 git checkout v2.4.0 으로 정확히 그 release 시점 production 자리. 복구할 가치 있는 모든 순간에 같음: 고객이 'v2.3.7 에서' 버그 재현하면 초 단위로 거기 자리 잡음.

중요한 tag 타입 둘. Lightweight tag (git tag v2.4.0) 는 그냥 pointer 파일 — commit 의 이름, metadata 없음. Annotated tag (git tag -a v2.4.0 -m "Release 2.4.0") 는 author, 날짜, 메시지, (선택적) GPG 서명 있는 full Git object. 실제 release 엔 항상 annotated. 서명이 인가된 사람한테서 release 왔는지 확인, 메시지가 audit trail 일부, git describe 가 annotated tag 로 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> 이 local tag 삭제, git push origin --delete <name> 가 remote tag 삭제. 조심: remote tag 삭제는 거의 옳지 않음, 이미 pull 한 사람 누구나 그 tag 여전히 가짐.

GitHub 의 'Releases' 기능은 annotated tag + UI: release note, 다운로드 가능한 자산 (tarball, binary), pre-release flag. 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 에 annotated tag 하나. git push origin <tag> 로 push. GitHub 의 Releases 또는 Tags 에 보이는지 확인. git describe --tags 돌려 출력 형식 읽어. Global 에 push.followTags = true 추가. 가능하면 소급 적용해 tag 할 만한 프로젝트 history 의 순간 하나 적어.

Progress

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

댓글 0

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

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