Section 17: Git tag: 히스토리상의 중요한 순간에 표시하기

김남훈·2024년 2월 3일

Git & Github

목록 보기
15/18

Critical

Important

Understanding Git Tags

특정 커밋에 추가하는 일종의 라벨이다. 주로 프로젝트 릴리스를 표시하는 용도로 사용된다. 태그는 시간의 어떤 지점을 가리키는 라벨과 비슷하다. 브랜치 레퍼런스는 커밋이 추가되면 가리키는 대상이 변한다. 그러나 태그는 처음 지정된 커밋을 계속 가리킨다. 아래의 그림을 보면 이해가 된다. 보통 브랜치가 머지될 때 새로운 버젼을 붙이는데 이때 태그가 사용된다. 태그에는 light weight tagannotated tag가 있다. 전자는 특정순간에 이름을 붙이는 것이고 주석 태그는 여러 메타 데이터를 담을 수 있다. 많은 정보를 담고 있기 때문에 많은 기업에서는 anotated tag(주석 태그)를 많이 사용한다.

Viewing Tags

git tag를 하면 현 저장소에 있는 태그를 전부 조회한다. 목록에 필터를 걸거나 특정 태그 조회하기도 가능하다. git tag -l "*beta*" * 과같은 와일드 카드를 사용해서 가능하다. 만약에 태그가 있는 커밋으로 가고싶으면 git checkout 15.3.1과 같이하면 된다.

Lightweight vs Annotated Tags

일반 태그는 git tag <tagname>을 하면 그 시점에 헤드가 가리키고 있는 곳을 기본으로 해서 태그를 만든다. 결국 현재 있는 브랜치의 최신 커밋을 가리키게 된다. 주석 태그를 생성하려면 기존 명령어에 -a를 추가한다. git tag -a <tagname> 이렇게 하면 텍스트 편집기가 실행된다. 추가 정보를 입력하라는 안내 메시지에 추가 정보를 입력하면 된다. 이 정보를 어떻게 볼 수 있을까? git show v17.1.0를 하면 태그의 메타데이터를 볼 수 있다.

Pushing Tags

커밋을 원격 저장소로 푸쉬한다고 해서 태그도 자동으로 푸쉬되지 않는다. 따라서 태그를 푸쉬해주어야한다. 하나하나 git push origin mytag를 할 수 있지만 태그 전부를 푸쉬하고 싶다면 git push origin --tags를 하면 된다.

Nice To Have

Semantic Versioning

시맨틱 버저닝은 버전 번호를 매기는 일종의 규약, 명세, 규칙같은 것이다. 주 목적은 버전을 명확하게 그리고 의미 있게 명시하는 것이다. 버전명은 아래 그림처럼 나타낸다.

애플리케이션이나 라이브러리를 개발할때 최초 배포하는 릴리스 버전은 보통 1.0.0 이다. 최초 버전이후 배포하는 작은 업데이트는 패치라고 하며 이때는 새로운 기능이나 의미 있는 변경사항을 포함하지 않고 단순한 버그 수정 사항이나 아주 미미한 수정사항만 있어서 사용자가 소프트웨어나 코드를 사용하는데 문제가 없다. 예를 들어 1.0.0을 사용하는 사람이 1.0.1을 똑같이 사용할 수 있어야한다. 마이너 릴리스는 신기능이 추가됐을 때 배포하는 것이다. 그러나 프로젝트는 여전히 하위 호환성은 유지되어야 한다(but the project is still backwards compatible). 메이저 릴리스는 하위 호환성이 보장되지 않을 때를 의미한다. 버전명 끝에 beta를 붙일 수 있다.

Moving Tags

커밋해쉬를 이용해서 그 커밋으로 헤드를 옮긴 후, 태그를 다시 달 수 있다. git tag <tagname> <commit hash> 명령어를 사용하면 된다. 태그를 이동하고 싶다면 즉 추가한 태그를 다른 커밋에 붙이려면 git tag -f <tagname> <commit hash> 를 사용하면 된다. 그러나 이러한 방법은 지양하는 것이 좋다. 태그 이름은 고유값이기 때문에 다시 사용이 불가해서 태그를 이동할 때도 있다.

Deleting Tags

git tag -d <tagname>을 하면된다.

Diffing Tags

git diff v17.0.0 v17.0.1을 하면 된다.

profile
안녕하세요

0개의 댓글