태그(tag)란?
태그는 깃에서 무언가를 표기해 두기 위해 특정 객체를 가리키는 역할을 하며 보통 릴리즈 버전 등 소스코드의 특별한 버전을 기록하는 데에 많이 사용된다.
commit dd8a420c12ca0a5206456399cfa4cfe38acce650 (HEAD -> master, tag: 1.1.3)
- 커밋 이이디를 적는 대신에 태그명을 통해 간결하고 가독성 있게 시용할 수 있다.
$ git checkout 1.1.3
// 기존 : $ git checkout dd8a420c12ca0a5206456399cfa4cfe38acce650
- 태그는 checkout을 통해 수정이 불가능하여 읽기만 가능하다. 하지만 커밋은 내용을 수정이 가능하다는 차이가 있다.
사용자들에게 제공되는 버전을 처음 릴리즈할 때 태그(1.0.0)를 하고 새로운 버전을 개발하면서 그 사이에 만들어지는 수 많은 커밋들 이 생성 되는데 그 중 버전이 완성되는 커밋만을 태그(1.1.0) 하는 방식으로 번전을 릴리즈 한다.
태그 사용하기
Git의 태그는 Lightweight 태그와 Annotated 태그로 두 종류가 있다.
Lightweight 태그는 브랜치와 마찬가지로 어떤 특정한 커밋 아이디(버전)을 가리키지만 브랜치처럼 가리키는 지점을 최신 커밋으로 이동시키지 않고 언제나 같은 커밋을 가리킨다.
Annotated 태그는 단순히 특정 커밋에 대한 체크 포인트가 아니라 태그를 만든 사람의 이름, 이메일과 태그를 만든 날짜, 그리고 태그 메시지도 저장한다.
- 태그를 사용할 때는 일반적으로 Annotated 태그를 만들어 이 모든 정보를 사용할 수 있도록 하는 것이 좋다.
- 임시로 생성하는 태그거나 이러한 정보를 유지할 필요가 없는 경우에는 Lightweight 태그를 사용할 수도 있다.
태그 생성하기
lightweight 태그 생성
Lightweight 태그를 생성하는데 tag 명령어를 사용하며 별다른 옵션을 필요로 하지 않는다.
$ git tag 1.1.2(버전명)
- 단순히 특정 커밋에 대한 포인터로 다른 정보를 저장하지 않기 때문이다.
- 명령어를 실행하면 버전명을 가지는 파일 단 하나만 'refs/tags/버전명' 경로에 생성된다.
$ cat .git/refs/tags/1.1.2
b19bf2ecfadc34b7425600d2dd319563a0b2074d
// 단순히 커밋 객체를 가리킨다.
$ git cat-file -t b19bf2ecfadc34b7425600d2dd319563a0b2074d
commit
- 바이너리가 아닌 일반 텍스트 파일로 특정 커밋 객체를 가리키고 있다.
$ git show 1.1.2
commit b19bf2ecfadc34b7425600d2dd319563a0b2074d (tag: 1.1.2)
Author: PiggPotato <ki9678@naver.com>
Date: Wed Apr 10 19:09:54 2024 +0900
5
Annotated 태그 생성
annotated 태그를 생성하는데 tag 명령어를 사용하며 -a 옵션을 추가 해야 한다.
- 마찬가지로 명령어를 실행하면 버전명을 가지는 파일 단 하나만 'refs/tags/버전명' 경로에 생성된다.
- 하지만 lightweight 태그를 생성 할 때와 다르게 추가적으로 오브젝트 파일이 생성된다.
$ git tag -a 1.1.3 -m 'bug fix'
$ cat .git/refs/tags/1.1.3
93e779c331252c96b6f84a7bfff3de703e092210
// 단순히 커밋 객체를 가리키는것이 아니라 태그 객체를 가리킨다.
$ git cat-file -t 93e779c331252c96b6f84a7bfff3de703e092210
tag
- 이렇게 생성된 태그 객체는 특정한 오브젝트, 커밋에 대한 오브젝트를 가리키고 있으며 생성한 테그에 대한 이름, 작성자 등여러 정보와 태그에 대한 설명(메시지)를 포함하고 있다.
$ git tag -v 1.1.3
object dd8a420c12ca0a5206456399cfa4cfe38acce650
type commit
tag 1.1.3
tagger PiggPotato <ki9678@naver.com> 1712744938 +0900
bug fixed
error: no signature found
태그 공유하기
git push 명령은 자동으로 태그까지 리모트 서버에 전송하지 않는다. 태그를 만들었으면 서버에 별도로 Push 해야 한다.
git push origin <태그 이름>
// $ git push origin 1.1.3
- 한번에 여러 개의 태그를 업로드 하고자 한다면 --tags 옵션을 추가하여 사용해야 한다.
$ git push --tags
태그 조회하기
git tag 명령을 통해 이미 만들어진 태그가 있는지 확인할 수 있다.
$ git tag
1.0.0
1.1.0
1.1.2
1.1.3
- 알파벳 순서로 태그를 보여준다. 사실 순서는 별로 중요한 게 아니다.
git tag 명령에 -l(--list)옵션과 * (와일드 카드)과 함께 사용하면 조건에 맞는 태그를 조회할 수 있다.
$ git tag -l "1.1*"
1.1.0
1.1.2
1.1.3
태그 삭제하기
git tag 명령에 -d (--delete)옵션을 함께 사용하면 조건에 맞는 태그를 삭제할 수 있다.
$ git tag -d 1.1.2
'Git' 카테고리의 다른 글
[Git] 깃(Git)의 원리(3, Branch 정리)와 브랜치 병합(Merge / rebase) (0) | 2024.06.10 |
---|---|
[Git] 커밋 취소/되돌리기/덮어쓰기(reset / revert / amend) (0) | 2024.06.04 |
[Git] 깃(Git)의 원리(2, commit)와 깃 객체(Git Object) (0) | 2024.06.02 |
[Git] 깃(Git)의 원리(2, commit)와 깃 객체(Git Object) (0) | 2024.05.28 |
[Git] 깃(Git)의 원리(1, add) (0) | 2024.04.11 |