주로 프로젝트 릴리즈를 표시하기 위해 사용되는 git tag 에 대한 포스팅 입니다.
$ git tag
아래는 Pairwise Testing 시 사용하는 툴 중 하나인 pict의 repository를 clone 하여 git tag
명령어를 실행한 결과입니다.
-l
옵션을 사용하여 특정 태그명이 포함된 태그를 조회할 수 있습니다.
$ git tag -l “<태그명>”
아래는 pict repository의 3.7 버전을 조회하는 예시입니다.
와일드카드(*) 패턴을 사용하여 조건에 맞는 태그를 조회할 수 있습니다.
$ git tag -l “v3.7*”
전체 태그 조회했을 시 총 5개의 태그 중 release
태그 외에는 모두 3.7 버전의 태그라 4개의 태그가 조회됨을 확인할 수 있습니다.
$ git checkout <태그명>
$ git checkout <commit-hash>
와 동일하게 입력한 태그명의 커밋 시점으로 체크아웃되어 HEAD가 특정 커밋을 직접 참조하는 detached HEAD 상태가 됩니다.
$ git show <태그명>
$ git show <commit-hash>
와 동일하게 입력한 태그 시점의 커밋 정보를 출력합니다.
pict repository에서 v3.7.4 태그의 커밋 정보를 출력해보았습니다.
$ git show v3.7.4
$ git log --oneline
명령어로 커밋 히스토리 조회 시,
v3.7.4 태그 시점의 커밋해시값은 d529bb1
으로, 아래 명령어 실행 시 $ git show v3.7.4
명령어와 동일한 결과가 노출되는 것을 확인할 수 있습니다.
$ git show d529bb1
태그명1과 태그명2의 diff를 출력합니다.
$ git diff <태그명1> <태그명2>
pict repository가 v3.7.3 -> v.3.7.4 로 업데이트되면서 어떤 변경사항이 발생하였는지 출력해보았습니다.
$ git diff v3.7.4 v3.7.3
여러 변경사항이 있는데, dllmain.cpp 파일 변경사항만 캡쳐해보았습니다.
코드 중 어떤 라인이 제거되었으며, 어떤 라인이 추가되었는지 아래와 같이 -, + 기호 및 색상으로 구분되어 확인할 수 있었습니다.
Git 태그는 총 두 가지 종류로, 일반적으로 이름 정보만을 갖는 일반 태그(Lightweight Tag) 와 상세한 정보를 포함하는 주석 태그(Annotated Tag) 가 있습니다.
일반 태그는 별도 추가 정보 기입 없이 아래 명령어 실행으로 태그가 생성됩니다.
$ git tag <태그명>
주석 태그의 경우, 아래 명령어 실행 시 $ git commit
명령어를 실행한 것과 동일하게 에디터가 실행되어 추가 정보를 기입할 수 있습니다.
$ git tag -a <태그명>
$ git commit -m "커밋메시지"
명령어와 동일하게 -m
옵션을 추가하면 에디터 실행없이 간단한 메시지를 작성할 수도 있습니다.
아래와 같이 커밋해시값 - 태그 맵핑 시킴으로써 이전 커밋에 태그를 생성할 수 있습니다.
$ git tag <태그명> <commit-hash>
태그명은 고유값으로, 재사용될 수 없습니다.
만약 실수로 태그를 잘못 생성한 경우에는 아래 명령어로 커밋해시값 - 태그를 재맵핑 할 수 있습니다.
$ git tag -f <태그명> <commit-hash>
$ git tag -d <태그명>
$ git push
명령어는 커밋 내역만 원격 저장소로 push 되기 때문에, 태그는 별도로 push 해야 합니다.
만약 커밋과 태그 동시에 push 하고 싶다면, --follow-tags
옵션을 사용할 수 있습니다.
$ git push --follow-tags
$ git push —-tags
$ git push <remote> —-tags
$ git push <remote> <태그명>