프로그램을 출시하거나 업그레이드하면 이에 해당하는 "버전"을 같이 명시한다.
Git에서도 코드 수정 과정 중 의미 있는 특정 시점에 숫자를 활용하여 버전을 명시할 수 있다.
그리고 Git에서는 주로 "태그"라는 기능을 활용하여 버전을 명시한다.
태그를 알기 전 태그의 일반적인 Naming Rule부터 알아보자.
(모든 Naming Rule이 그렇듯 필수사항은 아니고 대부분 이런 방식으로 이름 짓는다 정도의 선택 사항이라는 것을 알아두자)
[메이저 버전].[마이너 버전].[메인터넌스 버전]
Tag의 사전적 의미는 "어떠한 항목을 보충 설명하는 낱말 혹은 키워드"이다.
이런 의미를 보았을 때 Git Tag는 "커밋에 대한 보충 설명을 해주는 낱말 혹은 키워드"라고 할 수 있다.
조금 쉽게 비유해 보자면 Git Tag는 특정 커밋에 포스트잇을 붙이는 느낌이다.
Commit 시 태그에 버전을 달아주거나 주요 커밋에 대해서 태그를 달아준다면 다른 협업자들은 태그를 통해 중요 커밋을 확인하거나 버전을 통해 소스 코드 검색을 조금 더 쉽게 할 수 있을 것이다.
하지만 개인적으로는 Git Tag를 사용해 본 경험이 많이 없어서 실제로 유용하게 활용되는 개념인지 잘 모르겠다.
그냥 이런 것이 있다 정도로만 알고 넘어가자.
Git의 태그에는 "Lightweight 태그"와 "Annotated 태그"로 나뉜다.
Lightweight 태그는 특정 커밋에 대한 포인터의 역할로 단순히 태그에 이름만 달 수 있다.
Annotated 태그는 태그 이름뿐만 아니라 태그 생성자 정보, 태그 생성 날짜 및 주석까지 추가할 수 있다.
대부분의 경우 Annotated 태그로 만들어 해당 커밋의 자세한 정보를 알려주는 것이 좋지만 단순히 Tag로 커밋의 버전만 입력할 것이라면 Ligthweight 태그를 추천한다.
IntelliJ에서도 git tag를 활용할 수 있지만 그렇게까지 많이 활용하는 기능은 아니므로 CLI를 통한 태그 활용법만 기록하겠다.
git tag [Option] <Tag Name> [branch or Checksum]
브랜치 혹은 Checksum 입력을 생략할 경우 현재 HEAD가 가리키고 있는 커밋에 태그가 추가된다.
git tag
: 현재 커밋에 달린 Git Tag를 알려줌
git tag <Tag Name>
: Lightweight 태그 생성
git tag -a <Tag Name> -m <Tag Message>
: Annotated Tag 생성
git tag <Tag Name> [Branch명]
: 지정한 Branch의 최신 커밋에 태그 추가
git tag <Tag name> [Checksum]
: 지정한 체크섬을 가진 커밋에 태그 추가
git push <원격 저장소 이름> --tags
--tags
옵션을 활용하면 로컬 저장소에 등록된 모든 태그가 원격 저장소에 업로드된다.
git push <원격 저장소 이름> <태그 이름>
을 통해 태그를 1개씩 원격 저장소에 업로드할 수도 있긴 하지만 이 경우 업로드할 태그 이름을 외워놔야 하기 때문에 웬만하면 --tags
옵션 사용을 추천한다.