Git tag
이 문서에서는 Git의 태그에 대한 개념과 git tag
명령에 대해 설명하겠습니다. 태그는 Git 기록의 특정 지점을 가리키는 참조입니다. 태그는 보통 표시된 버전 릴리스(예: v1.0.1)에 사용되는 기록의 한 지점을 캡처하는 데 사용됩니다.
태그는 변하지 않는 브랜치와도 같습니다. 브랜치와 달리 태그는 만들어진 후 커밋 기록이 더 이상 없습니다. 브랜치에 대한 자세한 내용은 git branch
페이지를 참조하세요.
이 문서에서는 다양한 유형의 태그, 태그를 만드는 방법, 모든 태그 나열, 태그 삭제, 태그 공유 등에 대해 다루겠습니다.
태그 만들기
새 태그를 만들려면 다음 명령을 실행합니다.
git tag <tagname>
시맨틱 식별자가 있는 < tagname >
을 태그가 만들어지는 시점의 리포지토리 상태로 바꿉니다. 일반적인 패턴은 git tag v1.4
와 같이 버전 번호를 사용하는 것입니다. Git은 두 가지 유형의 태그(주석 태그 및 경량 태그)를 지원합니다. 이전 예시에서는 경량 태그를 만들었습니다. 경량 태그와 주석 태그는 저장하는 메타데이터의 양이 다릅니다. 가장 좋은 방법은 주석 태그를 공개로, 경량 태그를 비공개로 간주하는 것입니다. 주석 태그에는 태거 이름, 이메일 및 날짜와 같은 추가 메타데이터가 저장됩니다. 이것은 공개 릴리스를 위한 중요한 데이터입니다. 경량 태그는 기본적으로 커밋에 대한 '북마크'로, 커밋에 대한 이름이자 포인터일 뿐이며 관련 커밋으로 연결되는 빠른 링크를 만드는 데 유용합니다.
주석 태그
주석 태그는 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 치트 시트
솔루션 보기
Bitbucket Cloud에서 Git에 대해 알아보기
경량 태그
git tag v1.4-lw
이 명령을 실행하면 v1.4-lw
로 식별되는 경량 태그가 만들어집니다. 경량 태그는 -a
, -s
또는 -m
옵션 없이 만들어집니다. 경량 태그는 새 태그 체크섬을 만들어 프로젝트 리포지토리의 .git/
디렉터리에 저장합니다.
목록 태그
리포지토리에 저장된 태그를 나열하려면 다음을 실행합니다.
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
를 사용합니다. 이는 일반적으로 릴리스 후보를 식별하는 데 사용됩니다.
이전 커밋 태그
이전 태그 예시에서는 암시적 커밋에 대한 작업을 보여주었습니다. 기본적으로 git tag
는 HEAD
가 참조하는 커밋에 태그를 만듭니다. 또는 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
로 식별되는 새 주석 커밋이 만들어집니다.
이전 태그를 다시 태그/교체
기존 태그와 동일한 식별자로 태그를 만들려는 경우 Git에서 다음과 같은 오류 메시지를 표시합니다.
fatal: tag 'v0.4' already exists
또한 기존 태그 식별자로 이전 커밋에 태그를 지정하려고 하면 Git에서 동일한 오류 메시지를 표시합니다.
기존 태그를 업데이트해야 하는 경우에는 -f FORCE
옵션을 사용해야 합니다.
git tag -a -f v1.4 15027957951b64cf874c3557a0f3547bd83b3ff6
위 명령을 실행하면 15027957951b64cf874c3557a0f3547bd83b3ff6
커밋이 v1.4
태그 식별자에 매핑됩니다. v1.4
태그의 기존 콘텐츠를 재정의합니다.
공유: 태그를 원격으로 푸시
태그 공유는 브랜치 푸시와 비슷합니다. 기본적으로 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
명령으로 전달합니다. 다른 사용자가 리포지토리를 복제하거나 풀하면 새 태그를 받게 됩니다.
태그 체크아웃
git checkout 명령을 사용하여 태그에서 리포지토리 상태를 볼 수 있습니다.
git checkout v1.4
위 명령으로 v1.4
태그를 체크아웃합니다. 그러면 리포지토리가 분리된 HEAD
상태가 됩니다. 어떤 변경 사항도 태그를 업데이트하지 않는다는 뜻입니다. 새 분리된 커밋을 만들 것입니다. 이 새 분리된 커밋은 어떤 브랜치에도 속하지 않고 커밋 SHA 해시를 통해서만 직접 연결할 수 있습니다. 따라서 분리된 HEAD
상태에서 변경할 때마다 새 브랜치를 만드는 것이 가장 좋습니다.
태그 삭제
브랜치 삭제는 간단한 작업입니다. -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 태그를 삭제합니다.
요약
요약하자면 태그는 Git 리포지토리의 스냅샷을 만드는 데 사용되는 추가 메커니즘입니다. 태그는 보통 소프트웨어 릴리스 주기에 해당하는 시맨틱 버전 번호 식별자 태그를 만드는 데 사용됩니다. git tag
명령은 만들기, 수정, 삭제와 같은 태그의 주요 동인입니다. 태그에는 주석 태그 및 경량 태그의 두 가지 유형이 있습니다. 주석 태그는 태그에 대한 중요한 메타데이터를 추가로 저장하므로 일반적으로 더 나은 방법입니다. 이 문서에서는 git push 및 git checkout과 같이 추가적인 Git 명령에 대해 알아보았습니다. 이 명령의 다양한 사용에 대해 알아보려면 해당 페이지를 참조하세요.
이 문서 공유
다음 토픽
여러분께 도움을 드릴 자료를 추천합니다.
이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.