Important
- git tag 이해하기
- 태그 보기
- 태그 생성 및 푸시
Nice To Have
- Semantic versioning
- 태그 비교/삭제/옮기기
깃 태그는 특정 커밋에 추가하는 일종의 라벨이다. 주로 릴리즈 버전을 표시하는 용도로 사용된다.
커밋이 추가되면 같이 이동하는 브랜치 참조와 다르게 처음 지정된 커밋을 계속 참조한다.
*태그의 두 종류*
일반 태그(lightweight) : 특정 순간에 이름을 붙인다.
주석 태그(annotated) : 태그 메시지, 생성자 이름, 이메일, 날짜 등을 포함한다.
큰 프로젝트에서는 주석 태그를 선호하는 편이다.
시맨틱 버저닝(Semantic versioning)
버전 번호를 매기는 일종의 규칙이다.
버전명은 숫자 세개와 숫자 사이 점으로 구성된다. 2.4.1 같은 형태이다.
순서대로 메이저 릴리즈, 마이너 릴리즈, 패치 릴리즈이다.
패치 : 신규 기능이나 의미 있는 변경사항을 수반하지 않는다. 단순한 버그 수정이나 아주 미미한 수정사항만 포함된다.
마이너 : 신기능이 추가됐을 때 배포되며 하위 호환성이 유지된다. 반드시 신기능이 추가되는것은 아니지만 추가된 것으로 인해 사용자의 이용 경험이 바뀌지 않으면 마이너 릴리즈로 배포된다.
메이저 : 하위 호환성이 보장되지 않을 때, 기능 삭제 또는 큰 변화가 있을 때 배포된다. 사용자의 이용 경험이 달라질 수 있다.
git tag
현재 저장소의 모든 태그를 조회한다.
git tag <tagname> : HEAD가 가리키는 커밋에 일반 태그를 생성한다.
git tag -a <tagname> : HEAD가 가리키는 커밋에 주석 태그를 생성한다.
git tag <tagname> <commit-hash> : commit-hash가 가리키는 커밋에 태그를 생성한다.
git tag -l "*beta*" : beta라는 글자가 포함된 태그를 모두 조회한다. 만약 "beta*" 인 경우에는 beta로 시작하는 태그를 검색한다. "*beta" 는 beta로 끝나는 태그를 검색한다.
git tag -f <tagname> <commit-hash> : 태그를 이동시킨다.
git tag -d : 태그를 삭제한다.
git checkout <tag>
태그를 체크아웃한다. 브랜치 체크아웃과 다른점은 브랜치가 아닌 특정 커밋을 가리킨다는 점이다.
git diff <tag1>..<tag2>
두 태그를 비교한다. 예전에 두 커밋을 비교했던 것과 완전히 동일하다.
git show <tagname>
태그 정보를 조회한다.
태그는 고유한 값이어야만 하기 때문에 중복 부여가 불가능하다.
커밋을 원격 저장소로 푸시한다고 해서 태그도 같이 푸시되는 것은 아니다.
태그는 별도로 푸시 해주어야 한다.
$ git push --tags # 모든 태그 푸시
$ git push origin <tagname> # 특정 태그만 푸시