2 분 소요

개발자라면 누구나 한 번쯤 경험하는 상황이 있다. 소스 코드는 몇 MB에 불과한데, .git 폴더 용량은 수 GB까지 비대해져 있는 경우다. 특히 이미지나 바이너리 같은 대용량 파일(Git LFS)을 다루는 프로젝트라면 디스크 압박이 더 크게 느껴진다.

오늘은 Git 저장소에 쌓인 잔재와 미사용 대용량 캐시를 한 번에 정리해 저장소 용량을 최적화하는, 이른바 “Git 대청소 명령어 조합”을 소개한다.

한 줄로 실행하는 Git 대청소 명령어

프로젝트의 Git 루트 폴더에서 아래 명령어를 실행하면 된다.

git reflog expire --expire=now --all && git fetch && git pull && git gc --prune=now && git lfs prune

각 명령어가 실제로 어떤 역할을 하는지 순서대로 살펴보자.

명령어 상세 분석

1) 연결 고리 끊기: git reflog expire

git reflog expire --expire=now --all

Git은 git reset이나 브랜치 삭제 이후에도 reflog에 작업 이력을 일정 기간(기본 약 90일) 보관한다. 문제는 이 기록이 디스크 용량을 계속 차지한다는 점이다.

--expire=now --all은 이 보관 이력을 즉시 만료 처리한다. 즉, 아직 객체는 남아 있어도 “더 이상 되살릴 근거가 없는 상태”로 만들어 이후 정리 단계에서 제거 가능하게 만든다.

2) 최신 상태 동기화: git fetch + git pull

git fetch && git pull

본격적인 정리 전에 원격 저장소 기준 최신 상태로 동기화하는 단계다. 정리 직전 기준점을 맞춰두면, 불필요한 불안 요소를 줄이고 작업 안정성을 높일 수 있다.

3) 물리적 삭제 및 압축: git gc

git gc --prune=now

Git의 GC(Garbage Collection)를 강제 실행한다. 앞 단계에서 만료 처리된 객체 중 도달 불가능한 데이터들을 실제 디스크에서 삭제하고, 남은 객체들은 packfile로 재정렬/압축한다.

결과적으로 .git 용량 감소뿐 아니라 저장소 성능(객체 조회, 전송 효율)에도 도움이 된다.

4) 대용량 파일 캐시 정리: git lfs prune

git lfs prune

Git LFS를 사용하는 저장소라면 사실상 필수 단계다. 과거 체크아웃에서 내려받은 대용량 LFS 객체 로컬 캐시가 누적되어 용량을 크게 잡아먹기 때문이다.

git lfs prune은 현재 기준으로 더 이상 필요 없는 오래된 LFS 로컬 객체를 정리한다. 원격 LFS 저장소 데이터가 지워지는 것은 아니므로, 일반적인 사용에서는 안전하다.

실행 전 주의사항 (필독)

아래 항목은 반드시 확인하고 실행하자.

  1. 복구 불가능성 reflog를 만료하고 gc --prune=now까지 실행하면, 실수로 지운 커밋/브랜치를 되살릴 여지가 크게 줄어든다. 사실상 로컬 타임머신을 비우는 작업이다.

  2. 미푸시 작업 백업 원격에 올리지 않은 커밋이 있다면 먼저 git push로 보호하자. 중요한 변경은 별도 백업 브랜치/태그를 만들어 두는 것을 권장한다.

  3. 깨끗한 작업 상태 권장 정리 작업은 충돌 요인이 적은 상태에서 하는 것이 좋다. 가능하면 작업 중인 변경이 없는 클린 상태에서 실행하자.

마무리

이 명령어 조합을 주기적으로 사용하면 비대해진 .git 폴더가 눈에 띄게 줄어드는 경우가 많다. 특히 CI/CD 빌드 서버 디스크가 빠듯하거나, 대용량 에셋 교체가 잦은 프로젝트를 운영한다면 꽤 체감이 크다.

필요할 때마다 아래 한 줄만 기억해도 된다.

git reflog expire --expire=now --all && git fetch && git pull && git gc --prune=now && git lfs prune

댓글 남기기