중요한 이정표 표시하기

GitBeginner
지금 연습하기

소개

Git 탐험가 여러분, 환영합니다! 오늘은 프로젝트 기록에서 중요한 지점을 표시하는 데 가장 유용한 Git 기능 중 하나인 '태그 (Tags)'에 대해 깊이 있게 알아보겠습니다. 릴리스 버전과 같이 프로젝트의 중요한 이정표를 쉽게 표시하고 나중에 다시 찾아가고 싶었던 적이 있다면, Git 태그가 바로 여러분이 찾던 도구입니다.

Git 의 태그는 프로젝트 타임라인에 세워둔 이정표와 같습니다. 저장소 기록의 특정 시점을 중요하다고 표시할 수 있게 해주죠. 이는 특히 릴리스 시점 (v1.0, v2.0 등) 이나 프로젝트의 다른 중요한 단계를 기록할 때 매우 유용합니다.

이 실습에서는 다음 내용을 다룹니다:

  1. 경량 태그 (Lightweight Tags) 생성: 빠르고 간단한 태그
  2. 주석 태그 (Annotated Tags) 생성: Git 데이터베이스에 전체 객체로 저장되는 상세한 태그
  3. 태그 목록 확인: 저장소의 모든 태그를 확인하는 방법
  4. 태그 체크아웃: 특정 태그 시점의 프로젝트 상태를 확인하는 방법
  5. 태그 삭제: 더 이상 필요하지 않은 태그를 제거하는 방법

이 실습을 마치면 Git 프로젝트에서 태그를 자유자재로 생성하고 관리하며 사용할 수 있게 됩니다. 이를 통해 프로젝트 기록을 체계적으로 정리하고 개발 과정의 중요한 지점들을 쉽게 참조할 수 있는 강력한 도구를 갖게 될 것입니다.

그럼 Git 태그의 세계로 여정을 시작해 봅시다!

작업 공간 설정하기

태그를 붙이기 전에, 태그를 테스트할 커밋들이 있는 작업 공간을 만들어 보겠습니다. 새로운 디렉토리를 만들고 Git 저장소를 초기화한 뒤, 여러 번의 커밋을 통해 파일들을 추가하여 프로젝트 개발 과정을 시뮬레이션해 보겠습니다.

터미널을 열고 다음 명령어들을 입력하세요:

cd ~/project
mkdir git-tags-lab
cd git-tags-lab
git init

이제 몇 개의 파일을 만들고 일련의 커밋을 진행하겠습니다. 아래 명령어들을 복사해서 붙여넣으세요:

echo "## My Awesome Project" > README.md
git add README.md
git commit -m "Initial commit"

echo "function greet(name) { console.log('Hello, ' + name + '!'); }" > app.js
git add app.js
git commit -m "Add greeting function"

echo "const PI = 3.14159;" >> app.js
git add app.js
git commit -m "Add PI constant"

echo "function calculateArea(radius) { return PI * radius * radius; }" >> app.js
git add app.js
git commit -m "Add area calculation function"

방금 수행한 작업의 내용은 다음과 같습니다:

  1. README 파일을 생성하고 첫 번째 커밋을 했습니다.
  2. 인사말 함수가 포함된 JavaScript 파일을 생성하고 커밋했습니다.
  3. 같은 파일에 PI 상수를 추가하고 커밋했습니다.
  4. 마지막으로 면적 계산 함수를 추가하고 커밋했습니다.

이제 태그를 붙일 수 있는 기록이 담긴 저장소가 준비되었습니다!

경량 태그 생성하기

먼저 경량 태그 (Lightweight Tag) 를 만들어 보겠습니다. 경량 태그는 기본적으로 특정 커밋을 가리키는 포인터에 불과합니다. 값이 변하지 않는 브랜치라고 생각하면 이해하기 쉽습니다. 생성과 사용이 매우 간단하여 임시적인 용도나 개인적인 용도로 사용하기에 적합합니다.

경량 태그를 만들려면 git tag 명령어 뒤에 태그 이름을 입력합니다:

git tag v0.1

이 명령은 현재 커밋 (HEAD) 을 가리키는 v0.1이라는 이름의 태그를 생성합니다.

커밋 해시를 지정하여 과거의 커밋에 경량 태그를 붙일 수도 있습니다:

git log --oneline
8197680 (HEAD -> master, tag: v0.1) Add area calculation function
d93ae1c Add PI constant
7411f09 Add greeting function
35d7df5 Initial commit

그러면 커밋 목록이 나타납니다. "Add greeting function" 커밋의 해시를 복사하세요. 이 예시에서는 7411f09입니다 (실제 화면에 보이는 해시를 사용하세요).

q를 눌러 로그 뷰를 나간 뒤, 해당 커밋에 대한 태그를 생성합니다:

git tag v0.0.1 <commit-hash>

<commit-hash> 부분을 방금 확인한 실제 해시값으로 바꿉니다.

git tag
v0.0.1
v0.1

경량 태그는 임시 마커나 개인적인 용도로는 훌륭합니다. 하지만 추가 정보를 저장하지는 않습니다. 더 견고한 태깅, 특히 공개 릴리스를 위해서는 다음에 다룰 주석 태그를 사용하는 것이 좋습니다.

주석 태그 생성하기

주석 태그 (Annotated Tags) 는 Git 데이터베이스에 전체 객체로 저장됩니다. 여기에는 태그를 만든 사람의 이름, 이메일, 날짜 및 태그 메시지가 포함됩니다. 또한 GNU Privacy Guard(GPG) 를 사용하여 서명하고 검증할 수도 있습니다. 이러한 특성 때문에 공개 릴리스나 추가 정보를 포함하고 싶은 모든 태그에 이상적입니다.

주석 태그를 만들려면 git tag-a 플래그를 사용합니다:

git tag -a v1.0 -m "First major release"

이렇게 하면 "First major release"라는 메시지가 포함된 v1.0이라는 이름의 주석 태그가 생성됩니다.

git show 명령어를 사용하여 주석 태그의 상세 정보를 확인할 수 있습니다:

git show v1.0

이 명령은 태그를 만든 사람의 정보, 태그가 생성된 날짜, 주석 메시지 및 커밋 정보를 보여줍니다.

주석 태그는 훨씬 더 많은 정보를 포함하고 검증이 가능하기 때문에 공개 릴리스용으로 권장됩니다. 이는 "기록상의 이 지점은 중요하며, 그 이유는 다음과 같다"라고 명시하는 방법입니다.

태그 목록 확인하기

프로젝트가 커짐에 따라 꽤 많은 태그가 쌓일 수 있습니다. Git 은 태그를 나열하고 검색할 수 있는 쉬운 방법을 제공합니다.

저장소의 모든 태그를 나열하려면 다음을 입력하세요:

git tag

그러면 모든 태그가 알파벳 순서로 표시됩니다.

특정 패턴과 일치하는 태그를 검색하려면 -l (또는 --list) 옵션과 함께 와일드카드를 사용할 수 있습니다:

git tag -l "v1.*"

이 명령은 "v1."으로 시작하는 모든 태그를 나열합니다.

주석 태그의 메시지를 포함하여 태그에 대한 더 자세한 정보를 보려면 다음을 사용하세요:

git tag -n

이 명령은 태그 이름과 함께 주석 메시지의 첫 줄 (경량 태그의 경우 커밋 메시지) 을 보여줍니다.

태그는 원격 저장소로 자동으로 푸시되지 않는다는 점을 기억하세요. 태그를 공유하려면 명시적으로 푸시해야 하며, 이는 향후 실습에서 다룰 예정입니다.

태그 체크아웃하기

태그의 가장 유용한 기능 중 하나는 특정 태그가 지정된 시점의 프로젝트 상태를 쉽게 확인할 수 있다는 점입니다. 이는 특정 버전에서 발생한 버그를 재현하거나 릴리스에 포함된 정확한 코드를 검토할 때 매우 유용합니다.

태그를 체크아웃하려면 git checkout 명령어를 사용합니다:

git checkout v1.0

이 명령을 실행하면 저장소가 v1.0 이 가리키는 커밋에서 "분리된 HEAD(detached HEAD)" 상태가 됩니다. 이 상태에서는 코드를 둘러보거나 실험적인 변경을 하고 커밋할 수 있으며, 다른 브랜치에 영향을 주지 않고 이 상태에서 만든 커밋들을 버릴 수 있습니다.

만약 변경 사항을 만들고 이를 유지하기 위해 새 브랜치를 생성하고 싶다면 다음을 사용하세요:

git checkout -b branch-name v1.0

이렇게 하면 v1.0 태그 시점의 프로젝트 상태를 기반으로 branch-name이라는 새 브랜치가 생성됩니다.

특정 태그의 코드 확인을 마친 후 메인 브랜치의 최신 상태로 돌아가려면 다음을 입력합니다:

git checkout master

분리된 HEAD 상태에서는 주의가 필요합니다. 명시적으로 새 브랜치를 만들어 보존하지 않는 한, 이 상태에서 만든 커밋들은 다른 브랜치로 체크아웃할 때 고립 (orphan) 되어 유실될 수 있습니다.

태그 삭제하기

때로는 태그를 삭제해야 할 수도 있습니다. 실수로 생성했거나 더 이상 의미가 없는 경우일 수 있죠. Git 에서는 태그를 쉽게 제거할 수 있습니다.

로컬 저장소에서 태그를 삭제하려면 다음을 사용합니다:

git tag -d v0.0.1

이 명령은 로컬 저장소에서 v0.0.1 태그를 제거합니다.

태그를 삭제할 때는 주의하세요. 다른 사용자가 해당 태그를 참조 지점으로 사용하고 있을 수 있습니다. 공유된 태그를 삭제하기 전에는 팀원들과 소통하는 것이 일반적인 관례입니다.

요약

축하합니다! Git 태그 사용법을 마스터하셨습니다. 지금까지 배운 핵심 개념들을 정리해 보겠습니다:

  1. 경량 태그 생성: 임시 또는 개인적 참조를 위한 빠르고 쉬운 태그입니다.
  2. 주석 태그 생성: 추가 메타데이터가 포함된 상세한 태그로, 릴리스와 같은 중요한 이정표를 표시하는 데 적합합니다.
  3. 태그 목록 확인: 저장소의 태그를 확인하고 검색하는 방법입니다.
  4. 태그 체크아웃: 특정 태그 시점의 프로젝트 상태를 확인하는 방법입니다.
  5. 태그 삭제: 더 이상 필요하지 않은 태그를 제거하는 방법입니다.

태그는 프로젝트 기록에서 중요한 지점을 표시할 수 있게 해주는 Git 의 강력한 기능입니다. 특히 릴리스 시점과 기타 주요 마일스톤을 기록하는 데 매우 유용합니다.

기억해야 할 점:

  • 임시적이거나 개인적인 참조 지점에는 경량 태그를 사용하세요.
  • 공개 릴리스나 추가 정보를 포함하고 싶을 때는 주석 태그를 사용하세요.
  • 태그를 체크아웃한 후의 "분리된 HEAD" 상태에서는 주의가 필요합니다.
  • 특히 공유 저장소에 푸시된 태그를 삭제할 때는 신중해야 합니다.

Git 여정을 계속하다 보면 태그가 프로젝트 타임라인을 관리하는 데 얼마나 소중한 도구인지 알게 될 것입니다. 태그는 여러분과 여러분의 팀이 프로젝트 기록을 쉽게 탐색할 수 있도록 명확한 참조 지점을 제공합니다.

즐겁게 태깅하시길 바라며, 여러분의 프로젝트 이정표들이 항상 명확하게 표시되기를 응원합니다!