[tag]

 

특정 커밋에 별칭 및 추가 정보를 붙인다.

버전 관리에 사용되기도 한다.

 


 

태그 이름은 고유하도록 정해야 한다. 같은 이름을 갖는 태그가 있을 수 없다.

한 커밋에 여러 태그를 붙일 수는 있다.

 

> git   tag


v1.0.0

v1.1.0

v1.2.0

v2.0.0

단순하게 현재 사용되고 있는 모든 tag를 조회 가능

 

> git   tag   -l(--list)   "v.1.*"


v1.0.0

v1.1.0

v1.2.0

-l(--list)옵션으로 패턴과 일치하는 tag만 조회 가능

 

> git   show-ref   --tags   --dereference


925cde9bf383c643326ac463f33487e047274125 refs/tags/v1.0.0

73248f5979839a1554cd28a260c6e6306bec44c7 refs/tags/v1.1.0

b5ea8ad693bc6e59d9e723673ceda77ff6babfc7 refs/tags/v1.2.0

549ee285b393bdbf7b99da7ae6e7dd9422641684 refs/tags/v2.0.0<---- annotated 태그 본체

5924649e1d3153b6d93aa82f8214106e8dc7ce05 refs/tags/v2.0.0^{}<---- annotated 태그가 붙여진 커밋

git show-ref--tags옵션으로

사용 중인 태그와 붙여진 커밋들을 조회 가능

--dereference옵션도 붙여야 annotated 태그가 붙인 커밋도 조회할 수 있다.

(붙이지 않으면, annotated 태그는 태그 본체만 조회된다)

 

> git   log


commit 925cde9bf383c643326ac463f33487e047274125 (HEAD -> a01, origin/a01, tag: v1.0.0)<---- tag: 가 붙어있음

Author: USER <email@address.com>

Date: EEE MMM dd HH:mm:ss yyyy +0900

 

    add 002.txt

git log에서 tag가 붙은 것을 확인할 수 있으며,

tag가 붙은 커밋은 커밋ID 대신 tag를 사용할 수 있다.

(git revert v1.0.0처럼)

 

> git   ls-remote   --tags


From https://github.com/BlackdeerY/example.git

925cde9bf383c643326ac463f33487e047274125 refs/tags/v1.0.0

b5ea8ad693bc6e59d9e723673ceda77ff6babfc7 refs/tags/releaseFirst

925cde9bf383c643326ac463f33487e047274125 refs/tags/releaseFirst^{}

리모트의 태그들도 조회할 수 있다.

 


 

tag에는 별칭만 붙이는 lightweight 태그와,

추가로 태그작성자, 태그메시지, GPG 서명 등도 기입할 수 있는 annotated 태그가 있다.

 

> git   tag   태그명   [붙여질_커밋]

> git   tag   v1.0.0


아무 옵션도 없이 붙이면 lightweight 태그를 붙인다.

붙여질_커밋을 생략하면 현재 가리키는 커밋에 붙인다.

 

> git   tag   -a(--annotate)   태그명       [붙여질_커밋]

> git   tag   -a               relaseFirst


-a(--annotate)옵션으로 annotated 태그를 붙일 수 있다.

커밋할 때처럼 태그 메시지를 정할 수 있고, 태그를 생성한 시각과 작성자가 기록된다.

 

> git   show-ref   --tags   --dereference


925cde9bf383c643326ac463f33487e047274125 refs/tags/v1.0.0

b5ea8ad693bc6e59d9e723673ceda77ff6babfc7 refs/tags/releaseFirst<---- annotated 태그 본체

925cde9bf383c643326ac463f33487e047274125 refs/tags/releaseFirst^{}<---- annotated 태그가 붙여진 커밋

annotated 태그는 태그 스스로의 개체를 따로 갖는다.

annotated 태그를 lightweight 태그처럼 쓰려면, 태그명^{}처럼 뒤에 기호로 명시하여 커밋으로 사용한다.

 

> git   show   v.1.0.0<---- lightweight 태그


commit 925cde9bf383c643326ac463f33487e047274125 (HEAD -> a01, origin/a01, tag: firstRelease, tag: v1.0.0)

Author: USER <email@address.com><---- 커밋 작성자

Date: EEE MMM dd HH:mm:ss yyyy +0900<---- 커밋 작성시각

 

    add 002.txt<---- 커밋 메시지

 

diff --git a/002.txt b/002.txt

new file mode 100644

index 0000000..5902f77

--- /dev/null

+++ b/002.txt

@@ -0,0 +1 @@

+002

lightweight 태그는 일반 커밋과 다를바 없지만,

> git   show   releaseFirst<---- annotated 태그


tag releaseFirst

Tagger: USER <email@address.com><---- 태그 작성자

Date: EEE MMM dd HH:mm:ss yyyy +0900<---- 태그 작성시각

 

my first release<---- 태그 메시지

 

commit 925cde9bf383c643326ac463f33487e047274125 (HEAD -> a01, origin/a01, tag: firstRelease, tag: v1.0.0)

Author: USER <email@address.com><---- 커밋 작성자

Date: EEE MMM dd HH:mm:ss yyyy +0900<---- 커밋 작성시각

 

    add 002.txt<---- 커밋 메시지

 

diff --git a/002.txt b/002.txt

new file mode 100644

index 0000000..5902f77

--- /dev/null

+++ b/002.txt

@@ -0,0 +1 @@

+002

annotated 태그는 본체로 조회를 하면 태그의 정보를 덧붙여 보여준다.

 


 

> git   tag   -d   태그명

모든 태그는 -d옵션으로 삭제할 수 있다.

 

한 커밋에 여러 개의 태그를 붙일 수 있으므로,

태그를 수정하고 싶다면 새 태그를 붙이고 기존 태그를 삭제하면 된다.

> git   tag   v.1.1.0   v.1.0.0<---- lightweight 태그 자체가 그 태그가 가리키는 커밋

> git   tag   -d   v.1.0.0<---- 기존 태그 삭제


> git   tag   myRelease   releaseFirst^{}<---- annotated 태그가 가리키는 커밋을 명시

> git   tag   -d   releaseFirst<---- 기존 태그 삭제


annotated 태그는 태그 자체에 새 태그를 붙이는 것이 아니라,

기존 태그가 가리키던 커밋을 명시하여 새 태그를 붙이고, 기존 태그를 제거.

 


 

> git   ls-remote   --tags

> git   ls-remote   --tags


From https://github.com/BlackdeerY/example.git

925cde9bf383c643326ac463f33487e047274125 refs/tags/v1.0.0

b5ea8ad693bc6e59d9e723673ceda77ff6babfc7 refs/tags/releaseFirst

925cde9bf383c643326ac463f33487e047274125 refs/tags/releaseFirst^{}

리모트의 태그들을 조회할 수 있다.

 

커밋에 태그를 붙여도 git push기본적으로 함께 push되진 않는다.

git push --follow-tags로, --follow-tags옵션을 주면 태그도 함께 push할 수 있다.

 

> git   push   저장소명   태그명

> git   push   origin     v1.0.0


Total 0 (delta 0), reused 0 (delta 0), pack-reused 0

To https://github.com/BlackdeerY/example.git

 * [new tag]         v1.0.0 -> v1.0.0

태그만 자체적으로 따로 push하려면, 태그명을 직접 push한다.

> git   push   저장소명   --tags

> git   push   origin     --tags


Enumerating objects: 1, done.

Counting objects: 100% (1/1), done.

Writing objects: 100% (1/1), 176 bytes | 88.00 KiB/s, done.

Total 1 (delta 0), reused 0 (delta 0), pack-reused 0

To https://github.com/BlackdeerY/example.git

 * [new tag]         v1.1.0 -> v1.1.0

 * [new tag]         v1.2.0 -> v1.2.0

태그만 전체적으로 push하려면 위의 명령어를 사용한다.

 

> git   push   저장소명   :refs/tags/태그명

> git   push   저장소명   :태그명

> git   push   저장소명   -d   태그명

> git   push   origin     -d   v1.0.1


To https://github.com/BlackdeerY/example.git

 - [deleted]         v1.0.1

리모트의 태그는 위처럼 삭제할 수 있다.

(세 형태 모두 사용 가능)