git 태그(Tag)란
git에서 태그란 우리가 알고 있는 것처럼 무언가 표시를 해두기 위한 태깅 기능을 위한 것으로, 특정 커밋을 태그해 두는 것입니다. 특정 커밋을 가리키는 링크라고 생각해도 좋습니다. 커밋과 태그의 차이점이라고 한다면 커밋의 경우 checkout 하여 내용을 수정할 수 있으나, 태그는 수정이 불가능 하며, 따라서 읽기전용 커밋같은 개념입니다.
목적이 정해져 있는것은 아니지만 보통 태그는 소프트웨어의 버전을 릴리즈 할 때 사용합니다. 예를들어 제품이 1.0 이 릴리즈 될때 태깅을 한번 해 두고 1.1 버전을 개발하면서 그 사이에 만들어지는 브랜치들과 커밋들이 존재하는데 이러한 것들은 커밋으로만 관리하다가 1.1 버전이 완성되는 커밋에 태깅을 해두는 것입니다.
태그 조회하기
만약 자신의 프로젝트에 태그가 존재한다면 git tag 명령어로 이미 존재하는 태그를 확인할 수 있습니다. 태그는 문자 순서대로 정렬하여 보여주므로 버전 형식을 잘 따른다면 가장 오래된 버전이 가장 먼저 출력됩니다.
또한 태그가 많은 경우 한 페이지 모두 보여주지 못하여 페이지 단위로 출력하는데 스페이스나 엔터를 누르면 출력되지 않은 태그까지 출력되며, 태그 보기를 종료할때에는 q 를 입력합니다.
$ git tag
v0.99
v0.99.1
v0.99.2
v0.99.3
v0.99.4
그러나 검색패턴을 사용하여 조회할 수 있으므로 순서는 크게 중요하지 않습니다. 만약 1.8버전대의 모든 태그를 보고싶은 경우 다음과 같이 사용합니다.
$ git tag -l "v1.8*"
v1.8.0
v1.8.0-rc0
v1.8.0-rc1
v1.8.0-rc2
v1.8.0-rc3
v1.8.0.1
v1.8.0.2
태그와 태깅된 커밋의 SHA-1 체크섬을 같이 보는 경우 git show-ref --tags를 사용합니다.
$ git show-ref --tags
bcc8a837055fe720579628d758b7034d6b520f2e refs/tags/1.0
bcc8a837055fe720579628d758b7034d6b520f2e refs/tags/1.0.1
dbee06de85859af59591813d3004e6695b8bb278 refs/tags/1.0.2
4e3da33c59fafe34e237585743e86e24ba81046e refs/tags/1.0.3
git show 명령어를 사용하면 태그가 붙은 커밋에 대한 정보를 보여줍니다.
$ git show v1.0
commit dc48b11e0c6c77e2b96e89a18f34d7b0c4f9a9d4 (HEAD -> master, tag: v1.0, origin/master, origin/HEAD)
Author: Dave Methvin <dave.methvin@gmail.com>
Date: Wed Mar 7 20:09:09 2018 -0500
squash! Set attributes all at once, src last
git show 명령은 꽤 많은 정보를 출력하는데, 더욱 간단히 보려면 git log --decorate 를 사용합니다.
$ git log --decorate -1
commit dc48b11e0c6c77e2b96e89a18f34d7b0c4f9a9d4 (HEAD -> master, tag: v1.0, origin/master, origin/HEAD)
Author: Dave Methvin <dave.methvin@gmail.com>
Date: Wed Mar 7 20:09:09 2018 -0500
squash! Set attributes all at once, src last
태그 생성하기
태그에는 두 가지 종류가 있는데 Lightweight 태그와 Annotated 태그입니다. 먼저 Lightweight 태그의 경우는 단순히 버전같은 태그이름만을 남기는 태그입니다. 반대로 Annotated 태그는 태그 만든 사람의 이름, 이메일, 태깅 날짜, 태그 메시지까지 저장하며 GPG(GNU Privacy Guard)로 서명까지 가능합니다.
Lightweight 태그만을 남기면 이게 어떤 태그인지 누가 만든것인지에 대한 정보들을 알 수 없기 때문에 Annotated 태그를 사용하는것이 일반적입니다. 그러나 임시적으로 사용하기 위해 만드는 태그인 경우 Lightweight 태그를 사용하기도 합니다.
Lightweight 태그 생성하기
git tag [태그명] 과 같이 사용합니다.
$ git tag v1.0 #태그를 생성합니다.
$ git tag -l "v1.0" #생성된 태그를 확인
v1.0
Annotated 태그 생성하기
Lightweight 태그는 태그에 대한 정보는 없기 때문에 태그를 남기면서 정보를 같이 남기고 싶은 경우 Annotated 태그를 사용합니다. Annotated 태그를 생성하는 방법은 tag -a 옵션을 사용하는 것입니다. 커밋과 마찬가지로 태그를 남길때에도 메시지를 남겨야 하며 -m 옵션을 사용하면 태깅과 동시에 메시지를 작성할 수 있고 -m 옵션을 사용하지 않는 경우 자동으로 편집기를 실행합니다.
$ git tag -a v1.1 -m "second tag 1.1" #Annotated 태그 생성
$ git show v1.1 #태그 확인
tag v1.1
Tagger: dololak <dololak@git.io>
Date: Sat May 19 17:54:43 2018 +0900
second tag 1.1
...이후 정보는 Lightweight 태그와 동일...
특정 커밋에 태그 생성하기
이번에는 현재 상태를 태깅하는 것이 아닌 과거의 커밋을 태깅하는 방법을 알아보겠습니다. 과거의 특정 커밋을 태깅하려면 해당 커밋의 SHA-1 체크섬 값을 알아야 합니다.
$ git log --pretty=oneline
dc48b11e0c6c77e2b96e89a18f34d7b0c4f9a9d4 squash! Set attributes all at once, src last
1f4375a34227f42570d2b72e190e51bcfb1e8597 Ajax: Allow custom attributes when script transport is used
29e76e254059f8c2b695f4e41054260b52a6910d Misc: Update license prolog/epilog to placate Github checker
체크섬값을 모두 명시할 필요는 없고 다른 커밋의 체크섬값과 중복되지 않는 선에서 몇 글자만 사용해도 됩니다.
git tag -a [태그명] [대상 커밋의 체크섬값] 형식으로 사용합니다.
$ git tag v1.3 1f4375a
$ git show v1.3
commit 1f4375a34227f42570d2b72e190e51bcfb1e8597 (tag: v1.3)
Author: Dave Methvin <dave.methvin@gmail.com>
Date: Tue Sep 12 12:40:00 2017 -0400
Ajax: Allow custom attributes when script transport is used
태그를 원격 저장소에 push하기
git push 명령어를 사용해도 생성한 태그를 원격 저장소에 전송하지는 않습니다. 태그를 원격 저장소에 전송하려면 별로도 push해야 합니다. git push origin [태그 이름]을 실행합니다.
$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/dololak/jquery.git
* [new tag] v1.0 -> v1.0
만약 모든 태그를 push하려면 --tags 옵션을 추가합니다.
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 153 bytes | 76.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://github.com/dololak/jquery.git
* [new tag] v1.1 -> v1.1
* [new tag] v1.3 -> v1.3
출처 - https://git-scm.com/book/en/v2/Git-Basics-Tagging
'깃(Git)' 카테고리의 다른 글
[Git] 이클립스에서 eGit 사용시 커밋사용자 email, 이름 변경 방법 (2) | 2019.10.14 |
---|---|
[Git] git 명령어 단축시키기 Git Alias (0) | 2018.05.19 |
[Git] git remote 명령어로 원격 저장소 이름 변경 또는 삭제하기(연결제거) (0) | 2018.05.19 |
[Git] git remote 명령어로 원격 저장소 (Remote Repository) Clone(복사), add(추가), 확인하기 (0) | 2018.05.17 |
[Git] GitHub 화면 구성 설명 (0) | 2018.05.16 |