Refs

SHA1 해시를 직접 작업에 사용하기에는 가독성이 좋지 않습니다. 깃은 sha1 해시를 좀더 쉽게 사용할 수 있도록 refs 를 지원합니다.

포인터

지금까지 우리는 파일의 객체저장 과 트리, 커밋을 해보았습니다. 이렇게 작업한 결과를 log 명령을 통하여 확인해 보았습니다.

$ git log --stat 0ee97a

하지만 로그를 확인하기 위해서는 마지막 커밋의 sha1 해쉬값을 가지고 있어야 합니다.
매번 커밋마다 복잡한 sha1 해쉬를 기억하여 사용하기에는 힘이 듭니다.

깃은 이러한 커밋 해시를 쉽게 접근할 수 있도록 refs 라는 포인터를 제공합니다.

Refs 폴더

다음은 저장소의 Refs 내용입니다. 모든 커밋의 포인터는 .git/refs 폴더에 저장이 됩니다.

infoh@DESKTOP-VAKLOFQ MINGW64 /e/gitstudy19 (master)
$ find .git/refs/
.git/refs/
.git/refs/heads
.git/refs/tags

아직 마스터(master) refs는 없습니다.
새로운 refs/master를 추가해 봅니다. 마지막 커밋 해쉬를 refs에 추가해 봅니다.

infoh@DESKTOP-VAKLOFQ MINGW64 /e/jinygit/gitstudy19 (master)
$ echo "0ee97afec0380e074080129b339e5d284f4ba7d9" > .git/refs/master

생성된 refs/master를 이용하여 로그 기록을 확인해 보도록 합니다.

infoh@DESKTOP-VAKLOFQ MINGW64 /e/jinygit/gitstudy19 (master)
$ git log --pretty=oneline master
0ee97afec0380e074080129b339e5d284f4ba7d9 (refs/master) second commit
9d2258ca2884b8a3813692ea2900a728f1276e0e first commit

이제 쉽게 로그 기록을 확인할 수 있게 되었습니다.
하지만 아쉽게도 매번 커밋을 할때마다 refs/master를 새롭게 갱신해 주어야 합니다.

update-ref

매 커밋마다 ref/master의 파일을 직접 수정을 하는 것은 바람직 하지 않습니다.
깃은 refs 파일을 대신 수정할 수 있는 update-ref 명령을 제공합니다.

infoh@DESKTOP-VAKLOFQ MINGW64 /e/jinygit/gitstudy19 (master)
$ git update-ref refs/head/master 0ee97afec0380e074080129b339e5d284f4ba7d9

update-ref 명령을 통하여 refs 값을 갱신할 수 있습니다.

infoh@DESKTOP-VAKLOFQ MINGW64 /e/jinygit/gitstudy19 (master)
$ cat .git/refs/head/master
0ee97afec0380e074080129b339e5d284f4ba7d9

체크아웃을 통하여 브랜치를 이동할 때, 브랜치는 항상 마지맛의 커밋의 HEAD를 가리키게 되어 있습니다.
이 또한 Refs로 체크아웃은 매번 update-ref 를 통하여 HEAD 포인터를 갱신하는 것입니다.

깃교과서

버전 관리 시스템의 이해와 설치부터 커밋, 브랜치, 임시 처리, 병합, 복귀, 서브모듈, 태그까지
깃, 소스트리, 깃허브로 실습하며 기본기를 탄탄하게 다진다!