본문 바로가기
목차
utils/git and github

[Git] tag: 특정 commit 을 가리키는 별명.

by ds31x 2024. 1. 1.
728x90
반응형

git show <tag> 로 상세정보 확인 가능.

git tag

tag는
특정 commit에 붙이는 별명
해당하는 이름임.

  • 특정 commit을 가르키는 포인터라고 생각하면 됨.
  • release 등 을 할 경우, tag는 v1.0.0 등으로 명명됨.
  • 해당 tag를 통해 프로젝트의 특정 시점의 snapshot을 쉽게 가져올 수 있음
    • commit id 로도 가능하지만, hash 값은 실제적으로 기억이 불가능
    • 반면 tag는 쉽게 기억할 수 있는 의미있는 이름으로 주어지며, 때문에 보다 쉽게 사용가능함.
  • tag로 restore를 할 경우, 그 상태로는 추가적인 변경 후 commit 작성이 안 됨(배포용)
    • tag는 단순한 commit의 포인터일 뿐 branch가 아님.
    • 때문에 추가 commit을 작성하려면, 해당 tag를 기준으로 새 branch를 만들어야 함.

version 이름을 짓는 법은 다음을 참고:

2024.09.19 - [Python] - [Etc] SW Version: Semantic Versioning + packaging.version

 

[Etc] SW Version: Semantic Versioning + packaging.version

1. Semantic Versioning SystemSemantic Versioning (SemVer) 시스템에 따라,소프트웨어에서 major와 minor, patch (or micro) 버전을 구분하여 버전을 매김.Python에서는 PEP 440 에서 버전 표기 방식을 지정하고 있으며 SemVe

ds31x.tistory.com


Tag 종류

Git에서는

  • Lightweight Tag
  • Annotated Tag로 두 종류가 있음.

Lightweight Tag

  • 특정 커밋에 대한 단순 포인터.
  • TAG에 대한 부가적인 정보없이 관련 commit의 checksum값만 가짐.

 


Annotated Tag

  • Git 데이터베이스에 tag를 만든 사람의 이름, 이메일과 만든 날짜, 그리고 tag message도 저장.
  • GPG(GNU Privacy Guard)로 서명도 가능.

일반적으로 Annotated 태그를 만들어 이 모든 정보를 사용할 수 있도록 하는 것을 권장하지만,
임시로 생성하는 tag거나 이러한 정보를 유지할 필요가 없는 경우에는 Lightweight 태그를 사용한다.


기본 사용법

기본적인 tag 관련 사용법은 아래와 같음. 단, remote repository와 관련된 사용법은 좀 더 아래에서 다룸.


tag 조회

현재 존재하는 Tag 들의 리스트를 조회함.

$ git tag
  • 해당 option은 알파벳 순으로 보여준다.(시간순 아님)

다음과 같이 -l (L의 lower case. list를 의미)을 통해 검색패턴을 사용할 수도 있음.

$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0

 

git show <tag_name> 을 통해 자세히 살펴보는 것도 가능.


Annotated tag 만들기.

다음의 예는 annotated tag를 만드는 방법을 보여줌.

git tag -a v1.0.0 -m “my version 1.0”

 

위의 경우는 현재 최종 commit에 tag v1.0.0 이라는 이름의 annotated tag를 달게 됨.

  • git show 를 이용하여 해당 정보와 관련 commit 정보를 확인 가능함.
  • -a : --annotate 를 의미.
    • Lightweight tag를 만들 때는 -a 등의 옵션 없이 tag명만 인자로 줌.
  • -m : commit에서 comment를 남기는 옵션과 같음. 주어지지 않을 경우 editor가 열림.

-a 로 주어진 tag 이름 뒤에, 대상이 되는 commit을 가르키는 commit id (hash value or hash key)가 주어질 경우,
해당 commit에 tag를 달게 됨.

git tag -a v1.1.0 9fceb02

Lightweight tag 만들기.

다음과 같이 옵션없이 처리하면 Lightweight tag가 만들어짐.

git tag v1.0.0

tag 삭제.

다음처럼 -d 를 통해 특정 tag삭제가 가능함.

git tag -d <tag_name>
  • 지정한 태그를 삭제.

tag의 상세정보 확인.

다음처럼 show 를 이용함.

git show <tag_name>
  • Tag의 상세정보 확인.

지정된 tag에 해당하는 상태로 working tree를 되돌리기.

이는 다음과 같이 checkout을 통해 이루어짐.

git checkout <tag_name>
  • 이 상태에서 수정을 해도 commit이 적용되지 않음.
  • 수정을 하려면, 수정 한 상태에서 branch를 새로 생성하여 commit 해주는 추가 처리 필요함.

위의 방법은 이전 git의 방법으로 switch를 이용한 다음의 방법을 추천함.

  • git switch -c <branch_name> <tag_name>
  • 를 통해 해당 tag_name 을 가지는 tag 기반으로 branch를 새로 생성하여 작업하는게 편함.

2023.12.30 - [utils/git and github] - [git] branch : branch를 생성하거나 확인 또는 삭제 및 변경

 

[git] branch : branch를 생성하거나 확인 또는 삭제 및 변경

branch : Branch를 생성하거나 확인하는 명령. branch 확인 아래와 같이 인자 없이 수행할 경우, 현재 존재하는 branch들을 보여줌. 기본적으로 main (과거엔 master) 라는 branch가 존재함. *표시는 현재 작업

ds31x.tistory.com


Remote repository에서의 tag 관련 작업

원격지의 tag들을 local 로 가져올 수도 있고, 원격지 에서만을 지울 수도 있음.


local repository의 tag를 remote repository에 올리기(synchronization)

이는 push를 통해 이루어지는데, 일반적인 git push로는 tag 정보는 전송되지 않음.

다음과 같이 push 를 tag 정보 전송을 위해 지정해야함.

git push <remote_respository_name> <target_tag>
  • <remote_respository_name> 은 주로 origin 임.

여러 tags를 한번에 push 하려면 다음과 같이 --tags를 사용.

git push <remote_repository_name> --tags

remote respository에서 tag 삭제하기.

역시 push를 사용하지만, 삭제를 의미하는 --delete 옵션과 함께 사용됨.

git push --delete <remote_respository_name> <tag_name>
  • <remote_repository_name> 은 일종의 alias로 origin으로 주로 사용됨.
  • 위의 명령어로는 remote repository에서만 삭제됨.

remote repository에서 tag 정보 가져오기.

  • git fetch 를 수행하면 tag 정보 및 branch 정보를 포함하여 local repository로 가져옴.
  • 만약 tag 정보만 필요한 경우, --tags 옵션을 추가한다.
git fetch --tags

같이 읽어보면 좋은 자료들

2024.05.20 - [utils/git and github] - [Git] Git Summary (작성중)

 

[Git] Git Summary (작성중)

git이란2024.05.20 - [utils/git and github] - Git : 소개 git 설치 후 해줘야 하는 작업들[Git] git 설치 후 우선 해줘야 하는 작업들 (tistory.com)local repository 초기화2024.05.20 - [utils/git and github] - [Git] init : local repo

ds31x.tistory.com


 

728x90