깃은 태그 생성 정보를 .git/ref/tags 폴더 안에 저장합니다. 태그 목록에 1.0.0, 1.1.0, 1.1.2가 있다면 태그 폴더에도 동일한 이름의 파일들이 있습니다.
infoh@DESKTOP MINGW64 /e/gitstudy10 (master)
$ git tag 태그 목록
1.0.0
1.1.0
1.1.2
infoh@DESKTOP MINGW64 /e/gitstudy10 (master)
$ ls .git/refs/tags 저장소 태그 기록
1.0.0 1.1.0 1.1.2 파일
tag 명령어를 사용하지 않고 직접 태그를 생성할 수도 있습니다. 간단하게 실습해 봅시다. 다음과 같이 태그 정보가 저장된 폴더의 파일을 읽으면 태그의 커밋 해시 값을 알 수 있습니다.
infoh@DESKTOP MINGW64 /e/gitstudy10 (master)
$ git log --decorate 커밋 로그
commit 3ba46c0a20a9812341e057818ef155f6801d0760 (HEAD -> master, origin/master)
Author: hojin <infohojin@gmail.com>
Date: Thu May 23 19:14:41 2019 +0900
test 2.0.0
commit 80f8890c3ff009f0d7d007d85a65d34c8ae2d25a (tag: 1.1.2)
Author: hojin <infohojin@gmail.com>
Date: Thu May 23 18:46:33 2019 +0900
test 1.1.2
commit f2691a05b82233acf5b37ffeae738ee07a596bde
Author: hojin <infohojin@gmail.com>
Date: Thu May 23 18:35:27 2019 +0900
test 1.1.1
commit da8d211b94a3fd5e2d3c3e722ec3fd909444c0ce (tag: 1.1.0)
Author: hojin <infohojin@gmail.com>
Date: Thu May 23 18:19:49 2019 +0900
test 1.1.0
commit 53028dc1486b42d23253ffd4001a758cef455372 (tag: 1.0.0, fix)
이하 생략
중간에 비어 있는 커밋을 이용하여 새로운 태그를 생성합시다.
f2691a05b82233acf5b37ffeae738ee07a596bde 커밋을 태그 1.1.1로 생성합니다.
infoh@DESKTOP MINGW64 /e/gitstudy10 (master)
$ echo f2691a05b82233acf5b37ffeae738ee07a596bde > .git/refs/tags/1.1.1 수동으로 태그 생성
그냥 해시 값을 가지는 파일만 생성했습니다. 새로운 태그 파일이 생성된 것을 확인합니다. 이렇게 생성된 태그는 Lightweight 태그입니다.
infoh@DESKTOP MINGW64 /e/gitstudy10 (master)
$ ls .git/refs/tags/ 저장소 태그 기록
1.0.0 1.1.0 1.1.1 1.1.2
infoh@DESKTOP MINGW64 /e/gitstudy10 (master)
$ git tag 태그 목록
1.0.0
1.1.0
1.1.1
1.1.2
Annotated 태그는 좀 더 복잡합니다. Annotated 태그는 좀 더 많은 정보를 가지고 있기 때문에 추가 정보에 대한 객체를 먼저 생성한 후 생성된 정보를 가리키는 객체의 해시 값을 사용해야 합니다.