슬기로운 개발생활

[Git] Git 버전관리 - 태그(Tag) 조회, 생성, 삭제, 올리기

by coco3o
반응형

태그(Tag)란?

git에서 태그란 무언가 표시를 해두기 위한 태깅 기능을 위한 것으로, 특정 커밋을 가리키는 링크라고 생각하면 될것같다.

 

커밋과 태그의 차이점이라고 한다면 커밋의 경우 내용을 수정할 수 있으나,  태그는 수정이 불가능 하다. 따라서 읽기전용 커밋같은 개념이다.

 

사용 목적은 정해져 있는 것은 아니지만 보통 태그는 소프트웨어의 버전을 릴리즈 할 때마다 사용한다.

 

예를들면 제품이 1.0이 릴리즈 될 때 태그를 해 두고 1.1 버전을 개발하면서 그 사이에 만들어지는 브랜치들과 커밋들이 존재하는데 이러한 것들은 커밋으로만 관리하다가 1.1버전이 완성되는 커밋에 태그를 해두는 것이다.

 

 

 

태그 조회하기

태그 전체를 조회할 때는 git tag 명령어를 사용하여 조회한다.

$ git tag
v1.0.0
v1.0.1
v1.1.0
v1.1.1
v1.1.2

만약 원하는 태그명(1.1버전대의 모든 태그를 보고싶은 경우)을 조건으로 검색하고자 한다면 git tag -l v1.1.* 를 사용한다.

$ git tag -l v1.1.*
v1.1.0
v1.1.1
v1.1.2

 

 

 

태그 생성하기

태그는 Lightweight Annotated 두 종류가 있다.

  • Lightweight Tag : 단순히 버전같은 태그이름만 남기는 태그
  • Annotated Tag : 태그를 만든 사람의 이름, 이메일, 태깅 날짜, 태그 메시지까지 저장한다. GPG(GNU Privacy Guard)로 서명도 할 수 있다.

 

Lightweight 태그 생성하기

git tag [tag name] 으로 생성할 수 있다.

$ tag v1.0.2
$git tag
v1.0.2

 

Annotated 태그 생성하기

tag -a 옵션을 사용해서 Annotated 태그를 사용한다.

커밋과 마찬가지로 태그를 남길때에도 메시지를 남겨야 하며 -m 옵션을 사용하면 태깅과 동시에 메시지를 작성할 수 있고,

-m 옵션을 사용하지 않는 경우 자동으로 편집기를 실행한다.

$ git tag -a v1.0.1 -m "second tag 1.0.1"
$ git show v1.0.1
tag v1.0.1
Tagger: coco <gotjd8515@naver.com>
Date:   Wed Jun 16 12:16:38 2021 +0900

second tag 1.0.1

 

 

특정 커밋에 태그 생성하기

현재 커밋에 태깅하는 것이 아닌 과거의 커밋을 태깅하는 방법은 해당 커밋의 해시코드 값을 알아야 한다.

$ git log --pretty=oneline
2558700d23dd22d36446aa2168e3ac9c3b20d6b3 function c() {}
b87aded5871f75a73f926b361f5af01f373b16ef function b() {}
a4ee985c40027d8f6f1b1f9c20bbe39520bea41d function a() {}

해시코드값을 모두 명시할 필요는 없고 다른 커밋의 해시코드값과 중복되지 않는 선에서 몇 글자만 사용해도 가능하다.

git tag -a [tag name] [hashcode] 형식으로 사용한다.

$ git tag -a v0.9 b87aded
$ git show v0.9
tag v0.9
Tagger: coco <gotjd8515@naver.com>
Date:   Wed Jun 16 12:27:54 2021 +0900

third tag

 

 

 

태그 원격 저장소에 올리기

git push 명령어를 사용해도 생성한 태그를 원격 저장소에 전송하지는 않는다.

태그를 원격 저장소에 전송하려면 별도로 push해야 한다. git push origin [tag name] 

$ git push origin v1.0.1
Enumerating objects: 30, done.
Counting objects: 100% (30/30), done.
Delta compression using up to 8 threads
Compressing objects: 100% (25/25), done.
Writing objects: 100% (30/30), 2.71 KiB | 462.00 KiB/s, done.
Total 30 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/hojunnnnn/first-repository.git
 * [new tag]         v1.0.1 -> v1.0.1

 

만약 모든 태그를 push하려면 --tags 옵션을 추가한다.

$ git push origin --tags
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 154 bytes | 154.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/hojunnnnn/first-repository.git
 * [new tag]         v0.9 -> v0.9
 * [new tag]         v1.0.0 -> v1.0.0

 

태그 삭제하기

태그가 필요없어졌거나 잘못 만든 태그를 삭제하기 위해선 -d 옵션을 사용하여 삭제할 수 있다.

$git tag -d v0.9

 

원격 저장소에 올라간 태그를 삭제하기 위해선 : 를 사용하여 삭제할 수 있다.

$ git push origin :v0.9
To https://github.com/hojunnnnn/first-repository.git
 - [deleted]         v0.9


 

 

references : https://dololak.tistory.com/348

http://minsone.github.io/git/git-addtion-and-modified-delete-tag

 

반응형

블로그의 정보

슬기로운 개발생활

coco3o

활동하기