Close

Git tag

이 문서에서는 Git의 태그에 대한 개념과 git tag 명령에 대해 설명하겠습니다. 태그는 Git 기록의 특정 지점을 가리키는 참조입니다. 태그는 보통 표시된 버전 릴리스(예: v1.0.1)에 사용되는 기록의 한 지점을 캡처하는 데 사용됩니다. 태그는 변하지 않는 브랜치와도 같습니다. 브랜치와 달리 태그는 만들어진 후 커밋 기록이 더 이상 없습니다. 브랜치에 대한 자세한 내용은 git branch 페이지를 참조하세요. 이 문서에서는 다양한 유형의 태그, 태그를 만드는 방법, 모든 태그 나열, 태그 삭제, 태그 공유 등에 대해 다루겠습니다.


태그 만들기


새 태그를 만들려면 다음 명령을 실행합니다.

git tag <tagname>

시맨틱 식별자가 있는 < tagname >을 태그가 만들어지는 시점의 리포지토리 상태로 바꿉니다. 일반적인 패턴은 git tag v1.4와 같이 버전 번호를 사용하는 것입니다. Git은 두 가지 유형의 태그(주석 태그 및 경량 태그)를 지원합니다. 이전 예시에서는 경량 태그를 만들었습니다. 경량 태그와 주석 태그는 저장하는 메타데이터의 양이 다릅니다. 가장 좋은 방법은 주석 태그를 공개로, 경량 태그를 비공개로 간주하는 것입니다. 주석 태그에는 태거 이름, 이메일 및 날짜와 같은 추가 메타데이터가 저장됩니다. 이것은 공개 릴리스를 위한 중요한 데이터입니다. 경량 태그는 기본적으로 커밋에 대한 '북마크'로, 커밋에 대한 이름이자 포인터일 뿐이며 관련 커밋으로 연결되는 빠른 링크를 만드는 데 유용합니다.

Annotated tags


주석 태그는 Git 데이터베이스에 전체 개체로 저장됩니다. 다시 말하자면, 태거 이름, 이메일 및 날짜와 같은 추가 메타데이터가 저장됩니다. 커밋 및 커밋 메시지와 유사하게 주석 태그에도 태그 지정 메시지가 있습니다. 또한 보안을 위해 주석 태그는 GPG(GNU Privacy Guard)로 서명하고 확인할 수 있습니다. git 태그에 대한 권장 모범 사례는 모든 관련 메타데이터를 확보할 수 있도록 경량 태그보다 주석 태그를 선호하는 것입니다.

git tag -a v1.4

이 명령을 실행하면 v1.4로 식별되는 새 주석 태그가 만들어집니다. 그런 다음 명령은 구성된 기본 텍스트 편집기를 열어 추가 메타데이터를 입력하라는 메시지를 표시합니다.

git tag -a v1.4 -m "my version 1.4"

이 명령을 실행하는 것은 이전 호출과 비슷하지만, 이 명령 버전에서는 -m 옵션과 메시지가 전달됩니다. 이것은 git commit -m과 비슷한 편리한 방법으로, 즉시 새 태그를 만들고 -m 옵션으로 전달된 메시지를 저장하기 위해 로컬 텍스트 편집기를 열지 않습니다.

Git 로고
관련 자료

Git 치트 시트

Bitbucket 로고
솔루션 보기

Bitbucket Cloud에서 Git에 대해 알아보기

Lightweight tags


git tag v1.4-lw

이 명령을 실행하면 v1.4-lw로 식별되는 경량 태그가 만들어집니다. 경량 태그는 -a, -s 또는 -m 옵션 없이 만들어집니다. 경량 태그는 새 태그 체크섬을 만들어 프로젝트 리포지토리의 .git/ 디렉터리에 저장합니다.

Listing tags


리포지토리에 저장된 태그를 나열하려면 다음을 실행합니다.

git tag

그러면 태그 목록이 출력됩니다.

v0.10.0
    v0.10.0-rc1
    v0.11.0
    v0.11.0-rc1
    v0.11.1
    v0.11.2
    v0.12.0
    v0.12.0-rc1
    v0.12.1
    v0.12.2
    v0.13.0
    v0.13.0-rc1
    v0.13.0-rc2

태그 목록을 세분화하려면 -l 옵션을 와일드카드 표현식으로 전달하면 됩니다.

$ git tag -l *-rc*
    v0.10.0-rc1
    v0.11.0-rc1
    v0.12.0-rc1
    v0.13.0-rc1
    v0.13.0-rc2
    v0.14.0-rc1
    v0.9.0-rc1
    v15.0.0-rc.1
    v15.0.0-rc.2
    v15.4.0-rc.3

이전 예시에서는 -l 옵션 및 -rc 접두사로 표시된 모든 태그 목록을 반환하는 와일드카드 표현식 -rc를 사용합니다. 이는 일반적으로 릴리스 후보를 식별하는 데 사용됩니다.

Tagging old commits


이전 태그 예시에서는 암시적 커밋에 대한 작업을 보여주었습니다. 기본적으로 git tagHEAD가 참조하는 커밋에 태그를 만듭니다. 또는 git tag를 특정 커밋에 참조로 전달할 수도 있습니다. 이렇게 하면 기본적으로 HEAD가 아닌 전달된 커밋에 태그가 지정됩니다. 이전 커밋 목록을 수집하려면 git log 명령을 실행합니다.

$ git log --pretty=oneline
    15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'feature'
    a6b4c97498bd301d84096da251c98a07c7723e65 add update method for thing
    0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
    6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'

git log를 실행하면 커밋 목록이 출력됩니다. 이 예시에서는 새 태그에 대해 가장 많이 사용되는 커밋 Merge branch 'feature'를 선택하겠습니다. Git에 전달할 커밋 SHA 해시를 참조해야 합니다.

git tag -a v1.2 15027957951b64cf874c3557a0f3547bd83b3ff6

위의 git tag 호출을 실행하면 이전 git log 예시에서 선택한 커밋에 대해 v1.2로 식별되는 새 주석 커밋이 만들어집니다.

ReTagging/Replacing old tags


기존 태그와 동일한 식별자로 태그를 만들려는 경우 Git에서 다음과 같은 오류 메시지를 표시합니다.

fatal: tag 'v0.4' already exists

또한 기존 태그 식별자로 이전 커밋에 태그를 지정하려고 하면 Git에서 동일한 오류 메시지를 표시합니다.

기존 태그를 업데이트해야 하는 경우에는 -f FORCE 옵션을 사용해야 합니다.

git tag -a -f v1.4 15027957951b64cf874c3557a0f3547bd83b3ff6

위 명령을 실행하면 15027957951b64cf874c3557a0f3547bd83b3ff6 커밋이 v1.4 태그 식별자에 매핑됩니다. v1.4 태그의 기존 콘텐츠를 재정의합니다.

Sharing: Pushing tags to remote


태그 공유는 브랜치 푸시와 비슷합니다. 기본적으로 git push는 태그를 푸시하지 않습니다. git push로 태그를 명시적으로 전달해야 합니다.

$ git push origin v1.4
    Counting objects: 14, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (12/12), done.
    Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
    Total 14 (delta 3), reused 0 (delta 0)
    To git@bitbucket.com:atlasbro/gittagdocs.git
     * [new tag]         v1.4 -> v1.4

여러 태그를 동시에 푸시하려면 --tags 옵션을 git push 명령으로 전달합니다. 다른 사용자가 리포지토리를 복제하거나 풀하면 새 태그를 받게 됩니다.

Checking out tags


You can view the state of a repo at a tag by using the git checkout command.

git checkout v1.4

위 명령으로 v1.4 태그를 체크아웃합니다. 그러면 리포지토리가 분리된 HEAD 상태가 됩니다. 어떤 변경 사항도 태그를 업데이트하지 않는다는 뜻입니다. 새 분리된 커밋을 만들 것입니다. 이 새 분리된 커밋은 어떤 브랜치에도 속하지 않고 커밋 SHA 해시를 통해서만 직접 연결할 수 있습니다. 따라서 분리된 HEAD 상태에서 변경할 때마다 새 브랜치를 만드는 것이 가장 좋습니다.

Deleting tags


브랜치 삭제는 간단한 작업입니다. -d 옵션 및 태그 식별자를 git tag에 전달하면 식별된 태그가 삭제됩니다.

$ git tag
    v1
    v2
    v3
    $ git tag -d v1
    $ git tag
    v2
    v3

이 예시에서는 git tag를 실행하여 v1, v2, v3을 보여주는 태그 목록을 표시한 다음 git tag -d v1을 실행하여 v1 태그를 삭제합니다.

요약


To recap, Tagging is an additional mechanism used to create a snap shot of a Git repo. Tagging is traditionally used to create semantic version number identifier tags that correspond to software release cycles. The git tag command is the primary driver of tag: creation, modification and deletion. There are two types of tags; annotated and lightweight. Annotated tags are generally the better practices as they store additional valuable meta data about the tag. Additional Git commands covered in this document were git push, and git checkout. Visit their corresponding pages for discussion on their extended use.


이 문서 공유
다음 토픽

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

도구로 가득한 벽을 사용하여 협업하는 사람들

Bitbucket 블로그

DevOps 일러스트레이션

DevOps 학습 경로

Atlassian 전문가와 함께 하는 Demo Den 기능 데모

Bitbucket Cloud가 Atlassian Open DevOps와 작동하는 방법

DevOps 뉴스레터 신청

Thank you for signing up