[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
'🌈Programming > Git' 카테고리의 다른 글
윈도우에서 Git Bash로 ssh 사용하기 (0) | 2021.10.12 |
---|---|
[Git] Git 버전관리 - stash (0) | 2021.06.17 |
[Git] Git 버전관리 - 기본 (github, remote, clone, push, pull, fetch) (0) | 2021.06.15 |
[Git] Git 버전관리 - 기본(branch, checkout, merge, conflict) (0) | 2021.06.15 |
[Git] Git 버전관리 - 기본 (init, add, commit, status, log, diff, reset) (0) | 2021.06.14 |
블로그의 정보
슬기로운 개발생활
coco3o