Git LFS(Large File Storage)는 Git에서 큰 바이너리 파일(비디오, 데이터셋, 디자인 에셋, 큰 바이너리)을 효율적으로 처리하기 위한 확장입니다. Git은 텍스트/소스 코드를 위해 설계되어 큰 바이너리를 잘 처리하지 못하므로, LFS는 이를 별도로 저장하면서 repository에는 가벼운 참조를 유지합니다.
문제: Git과 큰 바이너리
Git은 히스토리에 모든 파일의 모든 버전을 저장(전체 내용):
→ 큰 바이너리 파일(비디오, 데이터셋, PSD, 큰 바이너리)이 repo를 엄청나게 비대화:
- 변경마다 또 다른 전체 복사본 저장(바이너리는 diff가 잘 안 됨)
- repo와 모든 clone이 거대하고 느려짐(clone/fetch가 모든 히스토리 다운로드)
- 히스토리를 쉽게 줄일 수 없음(큰 blob이 영구적)
→ Git은 소스 코드(텍스트, diff 가능)에는 훌륭하지만, 큰 바이너리에는 부적합.
Git LFS의 작동 방식
Git LFS는 repo의 큰 파일을 작은 POINTER 파일(참조/해시)로 대체하고,
실제 큰 파일은 별도의 LFS 서버에 저장:
→ Git repo는 작게 유지(히스토리에 포인터만)
→ 실제 큰 파일은 필요할 때 다운로드(필요한 버전만)
→ 정상적으로 작업; LFS가 포인터 ↔ 실제 파일을 투명하게 교환.
