Git 커밋이 차지하는 공간은 파일의 압축 가능성과 변경된 파일·디렉터리 구조에 따라 달라진다. Git은 객체를 zlib으로 압축해 저장하고, 이후 객체 사이의 중복을 줄이는 팩 파일(packfile)로 공간을 더 절약할 수 있다. 아래 수치는 팩 파일을 만들지 않은 느슨한 객체(loose object) 상태에서 측정한 사례다.
자세한 내용은 Git 느슨한 객체 형식 문서와 Git 내부 구조의 팩 파일 설명을 참고할 수 있다.
측정한 저장 공간 증가량은 다음과 같다.
git init만 한 저장소: 64,828바이트- 작은 파일 250개를 커밋: 47,640바이트
- 파일 50개가 있는 디렉터리에서 파일 하나의 3바이트를 변경해 커밋: 17,145바이트
- 파일 하나만 있는 저장소에서 3바이트를 변경해 커밋: 8,709바이트
- 583,840바이트 바이너리 파일을 커밋: 297,873바이트
- 16,415,223바이트 소스 파일을 커밋: 1,622,188바이트
작은 변경도 커밋 객체와 트리 객체 등 저장소 구조에 필요한 데이터 때문에 수 KB의 공간을 차지할 수 있다. 반대로 큰 파일은 압축 덕분에 원본보다 적은 공간을 쓸 수 있다. 이 사례에서 16.4MB 소스 파일은 약 1.6MB로 저장됐다. 글은 파일 수가 적은 대형 커밋의 경우 .git에 저장되는 데이터가 커밋한 파일의 비압축 크기 중 10~50%일 수 있다고 설명한다.
파일 하나를 바꾼 커밋에서는 커밋 객체 하나, 변경된 디렉터리와 저장소 루트의 트리 객체 두 개, 파일 객체 하나 등 새 객체 네 개가 생겼다. 따라서 변경한 내용의 바이트 수만으로 커밋 크기를 예측할 수는 없다.
Git 데이터 모델 설명은 Julia “b0rk” Evans의 Git 데이터 모델 문서에서 확인할 수 있다. 원문은 Git으로 돌아가는 링크도 제공한다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요