git-tag

태그

태그라는걸 알게되서 정리해본다.
(git-scm 에서 내용들을 훑어 보았고, 그곳의 내용으로 정리해본다.)
보통 릴리즈할 때 사용한다고 한다(v1.0, 등등).

태그 조회하기

우선 git tag 명령으로 이미 만들어진 태그가 있는지 확인할 수 있다.

1
2
git tag
v1.0

이 명령은 알파벳 순서로 태그를 보여준다. 사실 순서는 별로 중요한 게 아니다.

검색 패턴을 사용하여 태그를 검색할 수 있다. Git 소스 저장소는 240여 개의 태그가 있다. 만약 1.4.2 버전의 태그들만 검색하고 싶으면 아래와 같이 실행한다.

1
2
3
4
5
git tag -l 'v1.4.2.*'
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4

태그 붙히기

Git의 태그는 Lightweight 태그와 Annotated 태그, 두 종류가 있다. Lightweight 태그는 브랜치와 비슷한데 브랜치처럼 가리키는 지점을 치신 커밋으로 이동시키지 않는다.

단순히 특정 커밋에 대한 포인터일 뿐이다.

한편, Annotated 태그는 Git 데이터베이스에 태그를 만든 사람의 이름, 이메일과 태그를 만든 날짜, 그리고 태그 메시지도 저장한다. 또 GPG(GNU Privacy Guard)로 서명할 수도 있다.

이 모든 정보를 저장해둬야 할 때에만 Annotated 태그를 추천한다.

그냥 다른 정보를 저장하지 않는 단순한 태그가 필요하다면 Lightweight 태그를 사용하는것이 좋다.

Annotated(주석[주해]이 달린) 태그

Annotated 태그를 만드는 방법은 간단하다. tag 명령을 실행할 때 -a 옵션을 추가한다.

1
2
3
git tag -a v1.0 -m "version 1.0"
git tag
v1.0

-m 옵션으로 태그를 저장할 때 메시지를 함께 저장할 수 있다. 명령을 실행할 때 메시지를 이볅하지 않으면 Git은 편집기를 실행시킨다.

git show 명령으로 태그 정보와 커밋 정보를 모두 확인 할 수 있다.

1
2
3
4
5
6
7
8
9
10
git show v1.0
tag v1.0
Tagger: choi sunki <iru@nate.com>
Date: Tue Mar 5 20:46:39 2019 +0900

version 1.0

commit 50ef865abd4bc3fbab66c1e7d4330f6188fcc601 (HEAD -> master, tag: v1.0, origin/master)
Author: choi sunki <iru@nate.com>
Date: Tue Mar 5 19:30:42 2019 +0900

커밋 정보를 보여주기 전에 먼저 태그를 만든사람이 누구인지, 언제 태그를 만들었는지, 그리고 태그 메시지가 무엇인지 보여준다.

태그 공유하기

git push 명령은 자동으로 리모트 서버에 태그를 전송하지 않는다. 태그를 만들었으면 서버에 별도로 Push 해야 한다. 브랜치를 공유하는 것과 같은 방법으로 할 수 있다.

git push origin [태그 이름]을 실행한다.

1
2
3
4
5
6
7
git push origin v1.5
Counting objects: 50, done.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (44/44), 4.56 KiB, done.
Total 44 (delta 18), reused 8 (delta 1)
To git@github.com:schacon/simplegit.git
* [new tag] v1.5 -> v1.5

만약 한 번에 태그를 여러게 Push 하고 싶으면 --tags 옵션을 추가하여 git push 명령을 실행한다. 이 명령으로 리모트 서버에 없는 태그를 모두 전송할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
git push origin --tags
Counting objects: 50, done.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (44/44), 4.56 KiB, done.
Total 44 (delta 18), reused 8 (delta 1)
To git@github.com:schacon/simplegit.git
* [new tag] v0.1 -> v0.1
* [new tag] v1.2 -> v1.2
* [new tag] v1.4 -> v1.4
* [new tag] v1.4-lw -> v1.4-lw
* [new tag] v1.5 -> v1.5

누군가 저장소에서 Clone 하거나 Pull 을 하면 모든 태그 정보도 함께 전송된다.