Git & Github/[인강] Git & Github 실무 활용 완벽 가이드

[Git & Github] 18. Git의 이면 - 해싱(Hashing)과 객체

pakms980319 2025. 5. 2. 12:00
Important

    ● 로컬 설정 파일



Nice To Have
    ● refs 디렉토리
    ● HEAD
    ● 해싱 함수의 기초
    ● 깃 오브젝트

 

.git 폴더의 구성요소들

 

로컬 설정 파일

 

깃 설정은 글로벌로컬 두 가지 방식으로 설정 할 수 있다.

글로벌로 설정할 경우 모든 깃 repository에 동작하는 설정을 할 수 있으며

로컬로 설정할 경우 설정한 해당 repository에서만 적용되는 설정을 적용할 수 있다.

 

해당 챕터에서는 로컬에서 간단한 설정 조작만 맛 볼 예정이다.

로컬 설정은 config 파일을 직접 수정하거나 명령어를 통해서 깃의 설정을 바꿀 수 있다.

 

config 파일 수정

config 파일에 [user] 내용 추가
git bash - local config 확인

 

 

CLI 환경에서 config 수정

CLI - local config 수정
git bash - local config 확인


 

refs/
이 폴더 안에는 heads, tags 등의 하위 폴더가 있다.
heads 폴더는 저장소에 존재하는 브랜치에 대한 파일들이 존재하고 tags 폴더는 태그에 대한 파일들이 존재한다.
그리고 각 파일들은 해시값을 저장하고있다.
즉, refs 폴더에는 저장소에 존재하는 브랜치, 태그에 대한 참조값을 가지고 있다.


HEAD
HEAD 라는 포인터가 가리키는 곳의 참조값이 저장
된다.
주로 브랜치, 태그 포인터를 가리키는 참조값이 저장되며(HEAD → ~/main, ~/1.0.0)
커밋 해시(분리된 상태)를 직접 참조하기도 한다.


object/
저장소의 모든 데이터를 저장한다. 커밋, 트리, 블롭, 주석 태그 4종류의 깃 객체가 저장된다.
파일 데이터에 대한 해시값을 저장하므로 파일이 변경되면 해시값도 변경된다.


refs/ 는 "이 브랜치, 태그는 어떤 커밋을 가리키고 있는가?"를 알려주고
objects는 "그 커밋이 어떤 내용인가?"를 저장한다.

 

깃은 SHA-1이라는 해시 함수를 사용한다.

key(해시)-value(파일) 형식으로 작동한다. 사용자가 해시를 제시하면 파일을 반환해주는 구조이다.

깃의 해시는 반드시 깃 오브젝트와 연결되어있다.

 

깃은 해시값의 변경 여부를 확인해서 파일의 변경여부를 체크하게 된다.

오브젝트 폴더에는 해싱된 파일들이 저장되고 브랜치나 커밋 변경 시 해시 값으로 파일들을 참조하게 되는것으로 보인다.

git cat-file -p <hash>

 

위의 명령어로 해시값을 건네서 값을 돌려받을 수 있다.

이전에 등록한 커밋의 해시값을 전달해보니 해당 커밋에 대한 정보를 확인할 수 있었다.

 

블롭(Blob, Binary Large Object)
파일 내용을 저장하는 객체. 파일이 담고 있는 내용 그 자체이다. 파일명을 제외하고 오직 내용만 저장한다.


트리
디렉토리 내용을 저장한다. 블롭을 가리키는 포인터와 트리를 가리키는 포인터 둘 다 가지고 있다.
블롭의 파일명은 트리가 저장한다.



커밋
커밋을 하게되면 트리, 부모 등이 저장된다. 체크아웃이나 브랜치를 생성하면 해당 커밋의 트리를 토대로 작업 영역을 구성하게 된다.

git cat file -t <hash>  # 객체의 종류를 알려준다. tree/blob/commit




 


참고

1) https://www.udemy.com/course/best-git-github

2) https://erikanes.tistory.com/381

 

[Git & Github] 18. Git의 이면 - 해싱(Hashing)과 객체

Important 로컬 설정 파일 Nice To Have refs 디렉토리 HEAD 파일 해싱 함수의 기초 깃 오브젝트 이번 섹션은 깃을 사용하는데에 있어서 크게 중요하지는 않다. config 파일을 직접 수정하거나 명령어를 통

erikanes.tistory.com

3) https://velog.io/@southernlight/Section-18-Git%EC%9D%98-%EC%9D%B4%EB%A9%B4-%ED%95%B4%EC%8B%B1Hashing%EA%B3%BC-%EA%B0%9D%EC%B2%B4

 

Section 18: Git의 이면 -해싱(Hashing)과 객체

config 파일은 설정을 위한 파일로 모든 저장소에 존재한다. 이 파일에 값을 설정한다면 이 값은 현 저장소에서만 유효하고 다른 저장소에는 영향이 없다. 그러나 설정 값을 바꿀 때는 많이 없을

velog.io