git tag
tag는
특정 commit에 붙이는 별명에
해당하는 이름임.
- 특정 commit을 가르키는 포인터라고 생각하면 됨.
- release 등 을 할 경우, tag는 v1.0.0 등으로 명명됨.
- 해당 tag를 통해 프로젝트의 특정 시점의 snapshot을 쉽게 가져올 수 있음
- commit id 로도 가능하지만, hash 값은 실제적으로 기억이 불가능
- 반면 tag는 쉽게 기억할 수 있는 의미있는 이름으로 주어지며, 때문에 보다 쉽게 사용가능함.
- tag로 restore를 할 경우, 그 상태로는 추가적인 변경 후 commit 작성이 안 됨(배포용)
- tag는 단순한 commit의 포인터일 뿐 branch가 아님.
- 때문에 추가 commit을 작성하려면, 해당 tag를 기준으로 새 branch를 만들어야 함.
Tag 종류
Git에서는
- Lightweight Tag와
- Annotated Tag로 두 종류가 있음.
Lightweight Tag
- 특정 커밋에 대한 단순 포인터.
- TAG에 대한 부가적인 정보없이 관련 commit의 checksum값만 가짐.
Annotated Tag
- Git 데이터베이스에 tag를 만든 사람의 이름, 이메일과 만든 날짜, 그리고 tag message도 저장.
- GPG(GNU Privacy Guard)로 서명도 가능.
일반적으로 Annotated 태그를 만들어 이 모든 정보를 사용할 수 있도록 하는 것을 권장하지만,
임시로 생성하는 tag거나 이러한 정보를 유지할 필요가 없는 경우에는 Lightweight 태그를 사용한다.
기본 사용법
기본적인 tag 관련 사용법은 아래와 같음. 단, remote repository와 관련된 사용법은 좀 더 아래에서 다룸.
tag 조회
현재 존재하는 Tag 들의 리스트를 조회함.
$ git tag
- 해당 option은 알파벳 순으로 보여준다.(시간순 아님)
다음과 같이 -l
을 통해 검색패턴을 사용할 수도 있음.
$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
Annotated tag 만들기.
다음의 예는 annotated tag를 만드는 방법을 보여줌.
git tag -a v1.0.0 -m “my version 1.0”
위의 경우는 현재 최종 commit에 tag v1.0.0
이라는 이름의 annotated tag를 달게 됨.
git show
를 이용하여 해당 정보와 관련 commit 정보를 확인 가능함.-a
: --annotate 를 의미.- Lightweight tag를 만들 때는
-a
등의 옵션 없이 tag명만 인자로 줌.
- Lightweight tag를 만들 때는
-m
: commit에서 comment를 남기는 옵션과 같음. 주어지지 않을 경우 editor가 열림.
-a
로 주어진 tag 이름 뒤에, 대상이 되는 commit을 가르키는 commit id (hash value or hash key)가 주어질 경우,
해당 commit에 tag를 달게 됨.
git tag -a v1.1.0 9fceb02
Lightweight tag 만들기.
다음과 같이 옵션없이 처리하면 Lightweight tag가 만들어짐.
git tag v1.0.0
tag 삭제.
다음처럼 -d 를 통해 특정 tag삭제가 가능함.
git tag -d <tag_name>
- 지정한 태그를 삭제.
tag의 상세정보 확인.
다음처럼 show 를 이용함.
git show <tag_name>
- Tag의 상세정보 확인.
지정된 tag에 해당하는 상태로 working tree를 되돌리기.
이는 다음과 같이 checkout
을 통해 이루어짐.
git checkout <tag_name>
- 이 상태에서 수정을 해도 commit이 적용되지 않음.
- 수정을 하려면, 수정 한 상태에서 branch를 새로 생성하여 commit 해주는 추가 처리 필요함.
위의 방법은 이전 git의 방법으로 switch를 이용한 다음의 방법을 추천함.
git switch -c <branch_name> <tag_name>
- 를 통해 해당
tag_name
을 가지는 tag 기반으로 branch를 새로 생성하여 작업하는게 편함.
2023.12.30 - [utils/git and github] - [git] branch : branch를 생성하거나 확인 또는 삭제 및 변경
Remote repository에서의 tag 관련 작업
원격지의 tag들을 local 로 가져올 수도 있고, 원격지 에서만을 지울 수도 있음.
local repository의 tag를 remote repository에 올리기(synchronization)
이는 push를 통해 이루어지는데, 일반적인 git push
로는 tag 정보는 전송되지 않음.
다음과 같이 push 를 tag 정보 전송을 위해 지정해야함.
git push <remote_respository_name> <target_tag>
<remote_respository_name>
은 주로origin
임.
여러 tags를 한번에 push 하려면 다음과 같이 --tags
를 사용.
git push <remote_repository_name> --tags
remote respository에서 tag 삭제하기.
역시 push를 사용하지만, 삭제를 의미하는 --delete
옵션과 함께 사용됨.
git push --delete <remote_respository_name> <tag_name>
<remote_repository_name>
은 일종의 alias로origin
으로 주로 사용됨.- 위의 명령어로는 remote repository에서만 삭제됨.
remote repository에서 tag 정보 가져오기.
git fetch
를 수행하면 tag 정보 및 branch 정보를 포함하여 local repository로 가져옴.- 만약 tag 정보만 필요한 경우,
--tags
옵션을 추가한다.
git fetch --tags
같이 읽어보면 좋은 자료들
2024.05.20 - [utils/git and github] - [Git] Git Summary (작성중)
'utils > git and github' 카테고리의 다른 글
Git : 소개 (0) | 2024.05.20 |
---|---|
[git] git message 확인 방식: pager 사용여부 설정 (0) | 2024.01.30 |
[git] restore : 이전 상태로 되돌리기. (1) | 2024.01.01 |
[Git] log: commit history 살펴보기 (0) | 2023.12.31 |
[git] switch : branch 전환 (0) | 2023.12.31 |