Git Tag
Git Tag
Git Tag 는 특정 커밋에 "이름표(태그)"를 붙이는 기능
입니다.
일반적으로 릴리스 버전 관리(예: v1.0.0
, v2.1.3
)를 위해 사용되며, git tag
로 생성된 태그는 특정 커밋을 변하지 않는 참조(immutable reference)로 고정해 줍니다.
Git Tag 의 종류
Annotated 태그
- 태그를 만든 사람의 이름, 이메일, 태그 생성일, 태그 메시지를 저장한다.
- 일반적으로는 Annotated 태그를 사용하는 게 권장된다.
Lightweight 태그
- 단순히 특정 커밋에 대한 포인터로, 특정 커밋을 가리키는 역할만 한다.
- Annotated 와 같은 태그에 대한 메타데이터를 저장하지 않는다.
- Lightweight 태그는 임시로 사용하거나, 정보 저장이 필요 없을 때 사용.
Git Tag 만들기
Annotated 태그
git tag -a <태그명>
와 같이 -a
옵션을 추가하면 annotated 태그가 생성된다.
-m
옵션을 같이 사용하면 태그에 대한 메시지도 추가할 수 있다.
1
| git tag -a v1.4 -m "my version 1.4"
|
Lightweight 태그
- 별도 옵션 없이
git tag <태그명>
명령어를 사용한다.
-a
, -m
, -s
와 같은 옵션은 사용하지 않는다.
Tag 를 원격 저장소에 전송하기
git push
명령은 원격 저장소에 태그를 전송하지는 않는다.
- 따라서 Tag 를 원격 저장소에 전송하기 위해서는
git push origin <태그이름>
명령어를 추가로 실행해줘야 한다.
- 만약 한 번에 여러 태그를 Push 하고자 할 경우
--tags
옵션을 사용한다.
Tag 삭제
로컬 저장소의 Tag 삭제
- 로컬 저장소의 태그를 삭제할 때에는
-d
옵션 (--delete
와 동일) 을 사용한다.
원격 저장소의 Tag 삭제
- 원격 저장소의 태그를 삭제할 때에는 아래 세 가지 명령어를 적용할 수 있다.
1
2
3
| git push origin -d <태그이름>
git push origin :<태그이름>
git push origin :refs/tags/<태그이름>
|
원격 저장소 Tag 삭제가 안될 때
원격 저장소 Tag 삭제 명령어를 실행했는데, 아래와 같은 오류메시지가 출력되며 삭제가 되지 않는 경우가 있습니다.
1
2
3
4
| remote: GitLab: You can only delete protected tags using the web interface.
To http://mygitlab.org/some_repo/project.git
! [remote rejected] some_tag (pre-receive hook declined)
error: failed to push some refs to 'http://mygitlab/some_repo/project.git'
|
에러메시지를 보면 알 수 있듯, protected tag
는 web interface
를 사용해서만 제거할 수가 있습니다. CLI 나 API를 통해서는 삭제할 수 없는 것입니다.
두 가지 해결책이 있는데, 상황에 맞춰 진행하면 되겠습니다.
- 첫 번째, 에러메시지에서 권장한대로 web interface 에서 삭제
- 두 번째, 태그의 protect 를 해제하고 CLI 등으로 삭제
Git Tag 명령어
명령어 |
설명 |
git tag |
로컬 저장소에 있는 깃 태그 목록을 조회한다. |
git ls-remote --tags |
원격 저장소에 있는 깃 태그 목록을 조회한다. |
git show |
깃 태그에 대한 메타데이터와 커밋 정보를 조회한다. |
git tag -a <태그명> |
현재 커밋에 annotated 깃 태그를 생성한다. (로컬) |
git tag <태그명> |
현재 커밋에 lightweigh 깃 태그를 생성한다. (로컬) |
git push origin <태그명> |
원격 저장소에 지정 태그를 푸시한다. |
git push origin --tags |
원격 저장소에 푸시되지 않은 모든 태그를 푸시한다. |
git tag -d <태그명> |
로컬에서 지정 태그를 삭제한다. |
git push origin -d <태그이름> |
원격 저장소에서 지정 태그를 삭제한다. |
git push origin :<태그이름> |
원격 저장소에서 지정 태그를 삭제한다. |
git push origin :refs/tags/<태그이름> |
원격 저장소에서 지정 태그를 삭제한다. |
Reference
https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%ED%83%9C%EA%B7%B8
https://inpa.tistory.com/entry/GIT-%E2%9A%A1%EF%B8%8F-%ED%83%9C%EA%B7%B8-%EA%B8%B0%EB%8A%A5-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B2%95-tag
Comments