Git LFS가 뭔가요?
Git LFS(Git Large File Storage)는 Git으로 관리하기에는 너무 큰 파일(이미지, 동영상, 디자인 소스 등)을 좀 더 효율적으로 다루기 위한 확장 기능이다.
- Git은 파일 변경 이력을 전부 저장해서, 용량이 큰 파일이 자주 바뀌면 저장소 용량이 기하급수적으로 커져버린다.
- Git LFS는 커밋할 때 실제 파일 대신 포인터만 집어 넣고, 진짜 무거운 파일은 따로 보관해서 저장소가 너무 커지는 것을 막아준다.
쉽게 말하면,
"Git에는 파일의 짜잘한 정보(포인터)만 남기고, 실제 큰 데이터는 LFS 서버에 보관한다."
이렇게 생각하면 된다.
왜 써야하죠?
대형 파일을 몇번만 수정해도 용량이 기하급수적으로 커지기 때문에 지구를 위해서라도 쓰자.
1. 큰 파일로 인한 저장소 비대화 방지
- 대형 바이너리(예: 사진, 동영상,PSD 파일 등)가 자주 수정되면, Git이 모든 히스토리를 싹 다 가지고 있어서 용량 폭탄을 맞기 딱 좋다.
- Git LFS를 쓰면 히스토리에는 조그만 포인터 파일만 남는다.
2. 협업할 때 편함
- 프로젝트에 대형 파일이 잔뜩 있어도, 처음 클론할 때부터 다 다운받을 필요가 없다.
- 필요한 파일만 그때그때 다운받게 되니까 네트워크나 디스크 부담이 훨씬 줄어든다.
3. 중요 Git 호스팅 서비스의 공식 지원
- GitHub, GitLab, Bitbucket 등 대부분이 Git LFS를 지원함.
- 단, 서비스마다 LFS 용량이나 트래픽 제한이 있으니, 써보기 전에 확인해두는게 좋다.
설치 방법
Windows, macOS : 공식 사이트에서 다운로드 받아서 설치
Windows의 경우 Git for Windows를 설치할 때 내장되어 있음.
터미널로 설치하고 싶은 경우
- Windows : Chocolatey 사용용
choco install git-lfs
- macOS : Homebrew 사용
brew install git-lfs
- Linux : 각 배포판 패키지 매니저로 설치하거나 소스 빌드
예) Ubuntu sudo apt-get install git-lfs
잘 설치되었는지 확인하려면,
git lfs version
버전 정보가 쫙 나오면 성공!
기본 사용법
1) Git LFS 초기화
git lfs install
이미 설치된 상태라도 다시 실항하면 종종 Git 설정이 갱신될 때가 있다.
2) 추적할 파일 설정
git lfs track "*.psd"
git lfs track "*.png"
git lfs track "*.mp4"
...
이렇게 하면 .gitattributes
파일에 해당 확장자가 자동으로 추가된다.
이제부터 저 확장자 파일들은 LFS가 추적해서 실제 파일 대신 포인터 파일만 Git에 들어가게 된다.
3) 커밋 & 푸시
일반적인 Git 명령과 같다.
실제 큰 파일들은 LFS 서버로 올라가고, Git에는 포인터가 남는다.
4) 다른 사람이 Clone할 때
보통 git clone
하면 포인터 파일만 받아온다. 실제 파일 내용이 필요할 때 LFS 서버에서 다운 받기 때문에 클론 시간도 빠르고 용량도 훨씬 덜 먹는다.
일어날 수 있는 문제 & 주의사항
- 이미 커밋된 대형 파일
- LFS를 늦게 적용해서 과거 커밋에 이미 큰 파일이 들어 있으면 그 파일은 그대로 히스토리에 남아 있다.
- 이럴 땐
git filter-repo
나git filter-branch
등을 이용해서 커밋 이력을 수정해 주는 방법 밖에 없다(손 많이감).
- LFS 호스팅 용량 제한
- GitHub, GitLab 등의 무료 플랜에는 LFS 용량 제한이 있다. (GitHub 1GB 정도)
- 계속 대형 파일이 쌓이거나 자주 수정되면 금새 제한에 도달함.
- 큰 규모 프로젝트라면 자체 LFS 서버를 구축하는 경우도 있다.
- 팀원 전부 LFS 설치 필수
- 팀원중 누군가가 LFS 설치 안한 채 작업하면, 포인터 파일 자체가 커밋되어 버릴 수 있어서 문제가 발생할 수 있음
- 다들 LFS를 깔고 똑같이 설정해 줘야 협업이 매끄럽다.
- Git & LFS 버전 호환성
- 가능한 최신 버전을 쓰는게 좋다, 수시로 업데이트를 해주면 좋다.
마무리
Git LFS는 대용량 파일 때문에 생기는 골치 아픈 문제를 많이 해결해 줄 수 있는 아주 중요한 기능이다.
- 특히 게임 개발이나 영상등 대형 바이너리가 자주 수정되는 프로젝트라면 필수라고 봐도 된다.
- 쓸거라면 처음부터 LFS를 적용하는 게 가장 좋다. 안 그러면 나중에 이미 커밋된 대형 파일 지우느라 고생하게 된다.