[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