Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

Git 태그(git tag) 완벽 가이드: 생성부터 삭제까지 한 번에 정리

태깅(Tagging)은 Git 저장소의 히스토리에서 특정 지점을 추적하기 위해 사용하는 기능입니다.

Git 저장소에서 작업을 하다 보면 시간이 지남에 따라 코드베이스에 수많은 변경 사항이 쌓이게 됩니다. Git에서는 커밋(commit)을 통해 개별 변경 사항을 기록합니다.

하지만 프로젝트의 특정 버전처럼 저장소 히스토리의 특정 시점을 표시하고 싶다면 Git의 태깅 기능을 활용하는 것이 좋습니다.

이 글에서는 예제와 함께 태깅의 기본 개념과 git tag 명령어를 사용해 Git 저장소에서 태그를 다루는 방법을 살펴봅니다. 끝까지 읽고 나면 전문가처럼 Git 태그를 활용할 수 있게 될 것입니다.

Git 태깅이란?

태그(tag)는 Git 저장소 히스토리의 특정 지점을 가리키는 참조(reference, ref)입니다.

태그는 주로 개발자들이 저장소 히스토리의 특정 시점을 기록해 버전 릴리스를 만들 때 사용됩니다. 예를 들어, 개발자가 새 버전의 프로젝트를 출시할 준비가 되었을 때 해당 프로젝트에 태그를 생성할 수 있습니다.

본질적으로 태그는 변경되지 않는 브랜치라고 할 수 있습니다. 태그를 생성한 후에는 그 태그의 히스토리에 더 이상 커밋이 추가되지 않습니다. 대신 태그는 생성 당시 저장소의 모습을 담은 스냅샷을 저장합니다.

Git은 두 가지 유형의 태그를 지원합니다.

  • 주석 태그(Annotated tags): Git 데이터베이스에 완전한 객체로 저장되는 태그입니다.
  • 경량 태그(Lightweight tags): 이름과 커밋을 가리키는 포인터로만 구성된 태그입니다.

지금까지 Git 태깅의 기본 개념을 알아보았으니, 이제 실제로 Git에서 태그를 다루는 방법을 살펴보겠습니다.

태그 생성하기

Git에서 태그를 사용하려면 먼저 태그를 생성해야 합니다. Git에서 태그를 생성하는 문법은 다음과 같습니다.

git tag <name>

"name" 매개변수에는 생성하려는 태그의 이름을 입력합니다. 태깅은 주로 프로젝트의 버전을 추적하는 데 사용되기 때문에 "v1.2"나 "beta-v0.9" 같은 이름을 사용하는 것이 일반적입니다.

생성한 태그는 현재 작업 중인 커밋에 적용됩니다.

주석 태그(Annotated Tags)

주석 태그는 Git 데이터베이스에 하나의 완전한 객체로 저장되는 태그입니다. 주석 태그를 생성하면 태그를 만든 사람의 이름, 이메일, 태그 생성 날짜 등의 메타데이터가 함께 저장됩니다.

또한 주석 태그는 태그 메시지와 함께 저장됩니다. 일반적으로 주석 태그가 경량 태그보다 선호되는데, 그 이유는 주석 태그에 저장되는 메타데이터가 여러모로 유용하게 활용될 수 있기 때문입니다.

예를 들어, 시간이 지남에 따라 누가 버전 관리를 담당했는지 추적하고 싶다면 주석 태그에 저장된 메타데이터가 필요합니다.

Git에서 주석 태그를 생성하는 문법은 다음과 같습니다.

git tag -a <name>

-a 플래그는 Git에게 주석 태그를 생성하도록 지시합니다. "name" 매개변수는 생성할 태그의 이름입니다.

이 명령어를 실행하면 시스템 기본 텍스트 편집기가 열리고, 주석 태그에 넣을 메시지를 입력하라는 안내가 표시됩니다. 앞서 설명했듯이 주석 태그는 메시지와 함께 저장되기 때문입니다.

또는 메시지를 직접 지정하여 태그를 생성할 수도 있습니다. 다음 코드를 사용하면 됩니다.

git tag -a <name> -m <message>

-m 옵션은 주석 태그에 메시지를 추가할 때 사용합니다. 예를 들어 "version 1.9"라는 메시지와 함께 v1.9라는 태그를 만들고 싶다면 다음 코드를 사용하면 됩니다.

git tag -a v1.9 -m "version 1.9"

이 명령어를 실행하면 "version 1.9"라는 메시지가 포함된 v1.9 태그가 생성됩니다.

메시지 없이 git tag를 실행하는 것보다 이 방식이 더 편리합니다. 메시지를 직접 지정하지 않으면 기본 텍스트 편집기가 열려 메시지를 입력해야 하는데, -m 옵션을 사용하면 편집기를 거치지 않고 바로 메시지를 지정할 수 있기 때문입니다.

경량 태그(Lightweight Tags)

경량 태그를 생성하려면 앞서 살펴본 기본적인 git tag 문법을 사용하면 됩니다. 예를 들어 "v1.9.1"이라는 경량 태그를 만들고 싶다면 다음 코드를 사용하세요.

git tag v1.9.1

이 명령어는 v1.9.1이라는 경량 태그를 생성합니다. 경량 태그를 생성할 때는 태그 메시지를 지정할 필요가 없습니다. 대신 새로운 태그 체크섬이 생성되어 프로젝트의 .git 폴더에 저장됩니다.

프로젝트의 태그 목록 조회하기

규모가 큰 프로젝트를 진행하다 보면 저장소에 여러 버전의 태그가 쌓일 수 있습니다. 프로젝트에 저장된 태그 목록을 확인하려면 다음 명령어를 사용하세요.

git tag

이 명령어는 태그 목록을 반환합니다. 실행 결과 예시는 다음과 같습니다.

v1.9.1
v1.9.0
v1.8.11
v1.8.10
v1.8.9
...

또한 -l 옵션을 사용하면 특정 조건에 맞는 태그만 필터링해서 조회할 수 있습니다. 예를 들어 "v1.8"로 시작하는 모든 태그 목록을 가져오고 싶다면 다음 코드를 사용하세요.

git tag -l v1.8*

이 명령어에서는 -l 옵션 뒤에 "v1.8*" 패턴을 지정했습니다. 이렇게 하면 Git이 v1.8로 시작하는 모든 태그를 조회합니다. 별표(*)는 "v1.8" 뒤에 어떤 문자가 와도 상관없다는 의미입니다.

실행 결과 예시는 다음과 같습니다.

v1.8.11
v1.8.10
v1.8.9
v1.8.8
...

위 결과에서 볼 수 있듯이 반환된 모든 태그가 "v1.8"로 시작합니다.

태그 체크아웃하기

git checkout 명령어를 사용하면 특정 태그가 붙은 커밋 시점의 저장소 상태를 확인할 수 있습니다. 예를 들어 v1.1 시점의 저장소를 확인하고 싶다면 다음 코드를 사용하세요.

git checkout v1.1

이 명령어를 실행하면 저장소가 "detached HEAD" 상태로 전환됩니다. 즉, 이 상태에서 변경 사항을 아무리 수정해도 태그가 붙은 버전의 저장소는 업데이트되지 않습니다. 대신 어떤 브랜치에도 속하지 않는 분리된(detached) 커밋이 새로 생성됩니다.

명령어 실행 후에는 v1.1로 태그된 커밋 시점의 코드베이스 모습을 확인할 수 있습니다.

이전 커밋에 태그 달기

앞선 예제에서는 현재 작업 중인 커밋에 태그를 추가하는 방법을 살펴보았습니다. 기본적으로 git tag는 HEAD 커밋(현재 보고 있는 커밋)에 태그를 생성하기 때문입니다.

하지만 git tag 명령어로 과거의 커밋에도 태그를 달 수 있습니다. 이 경우 태그를 추가하려는 특정 커밋의 참조를 함께 지정하면 됩니다.

예를 들어 저장소의 마지막 커밋에 태그를 추가하고 싶다고 가정해 보겠습니다. 먼저 git log를 실행하여 최근 커밋 목록을 확인해야 합니다. 다음은 커밋을 한 줄씩 보기 좋게 출력해 주는 --pretty=oneline 옵션과 함께 실행한 예시입니다.

git log --pretty=oneline

실행 결과는 다음과 같습니다.

8cd29ae5d04abbdbd856d2c2f55f2b82133903e8 Push new logging feature
2911aae73ed1dd372bcdf8f520b174c3817c818b Initialize logging feature
9646aa785211f3069ce01177da98e23b7890d859 Fix issue #342

이제 "Fix issue #342" 커밋에 "v1.3"이라는 태그를 추가하고 싶다고 가정해 보겠습니다. 다음 코드로 태그를 추가할 수 있습니다.

git tag -a v1.3 9646aa785211f3069ce01177da98e23b7890d859

이 명령어는 코드에서 참조한 커밋에 v1.3 태그를 추가합니다. 여기서는 "Fix issue #342" 메시지가 있는 커밋의 SHA 해시를 지정했습니다.

기존 태그 교체하기

각 커밋에는 하나의 태그만 붙일 수 있습니다. 커밋에 연결된 태그를 다른 태그로 교체하고 싶다면 git tag 명령어를 사용하면 되지만, 반드시 -f(force) 옵션을 지정해야 기존 태그를 덮어쓸 수 있습니다.

앞선 예제에서 다룬 커밋에 "v1.3.1" 태그를 추가하고 싶다고 가정해 보겠습니다. -f 옵션 없이 실행하면 오류 메시지가 표시됩니다. 기존 커밋에 "v1.3.1" 태그를 추가하려면 다음 명령어를 사용하세요.

git tag -a -f v1.3.1 9646aa785211f3069ce01177da98e23b7890d859

이 명령어는 해당 커밋에 "v1.3.1" 태그를 추가하고, 기존의 "v1.3" 태그를 덮어씁니다.

태그 삭제하기

Git에서 태그를 삭제하려면 -d 옵션을 사용하면 됩니다. 예를 들어 저장소에서 "v1.3" 태그를 삭제하고 싶다면 다음 코드를 사용하세요.

git tag -d v1.3
git tag

실행 결과는 다음과 같습니다.

v1.4
v1.2
v1.1

첫 번째 명령어는 저장소에서 v1.3 태그를 삭제합니다. 두 번째 명령어는 태그 목록을 조회합니다. 결과를 보면 v1.3 태그가 사라진 것을 확인할 수 있는데, 이는 -d 옵션으로 태그를 삭제했기 때문입니다.

마무리

태깅은 개발자가 Git 저장소의 다양한 버전을 추적할 때 사용하는 중요한 기능입니다. 태그는 개발자가 현재 보고 있는 커밋에 추가할 수도 있고, 저장소의 기존 커밋에 추가할 수도 있습니다.

이 글에서는 예제와 함께 Git 태깅의 기본 개념과 git tag 명령어 사용법을 살펴보았습니다. 이제 전문 개발자처럼 git tag 명령어를 활용할 준비가 되셨습니다!