Git LFS 사용하기

코코블루·2021년 9월 1일
3
post-thumbnail

시작하며

최근에 Github에 관심이 많이 생겼습니다. 이전에는 그냥 오픈소스 장려하고자 생긴 서비스인줄 알고 그냥 소스를 대충 올렸습니다. 좀 더 파고보니 이를 이용하면 Cron Job도 무료로 수행할 수 있고, 친구들과 소스 코드 공유도 쉽게 할 수 있고, 커뮤니티의 역할도 수행하는 등 SW를 조금이라도 만지는 엔지니어에게 정말로 좋은 서비스인 것 같습니다.

이번에 소개할 내용은 Git LFS입니다. Git은 일반적으로 소스코드를 관리하기 위한 VCS 입니다. 그래서, 대용량 파일이 올라가는 것을 상정하지 않고 있는데요. Github에서 Push 할 때는 50MB부터 Warning을 표시하고 100MB부터 Error가 발생합니다. 그럼 방법이 없는걸까요? 있습니다!! 만일, Git에 꼭 올라가야할 대용량 파일이 있다면 LFS(Large File Storage)를 사용하면 됩니다.

Git LFS는?


Git LFS는 대용량 파일을 별도의 서버에 올리고, 원래 위치에는 포인터를 남깁니다. 즉, 대용량 파일은 다른 서버에서 받아오고 있지만, 포인터가 설정되어 있기 때문에 사용자 입장에서는 Git Push, Pull 등을 그대로 사용할 수 있습니다.

예시 상황

이번 글에서는 asset에서 사용하고 있는 약 30MB의 WAV 파일을 LFS에 올리는 상황을 상정해보겠습니다.

구조는 위와 같습니다. 핵심은 sound/sound.wav 파일입니다. 이 파일이 33.5MB로 100MB에는 못 미치지만 예시 상황이니 만큼 안 올라가고 있다고 상정해보겠습니다.

Git LFS 설치하기

일단, LFS를 사용하기 위해서는 git lfs를 설치해야합니다. 아래 명령어를 통해 설치할 수 있습니다.

Linux(Debian): apt-get install git-lfs
Linux(Red Hat): yum install git-lfs
macOS(brew): brew install git-lfs
Windows: 아래 사이트 참고하여 다운로드

또는 여기에서 다운로드 할 수 있습니다.

Git LFS 적용하기

1. Git LFS 사용 선언


Git Lfs를 이 Repo에서 사용하겠다고 선언해줘야합니다. 아래 명령어로 선언할 수 있습니다.

git lfs install

2. Git Track 해제

LFS에 올릴 파일은 Git의 Tracking에서 제외해야합니다. 아래 명령어로 Unstaging을 수행할 수 있습니다. --cached 옵션을 쓰는 이유는 LFS에 올려야하기 때문에 로컬에서는 존재해야하기 때문입니다. (매우 중요)

git rm --cached (file path)
ex) git rm --cached ./sound/sound.wav

3. Git LFS Track 설정

Git에서 Unstaging을 수행했다면, 이제 LFS에서 사용할 수 있도록 Tracking을 설정합니다.

git lfs track (file path)
ex) git lfs track ./sound/sound.wav

여기서는 아래와 같이 와일드카드도 사용할 수 있습니다.

ex) git lfs track "*.wav"

위의 예시에서는 repo 내에 있는 모든 wav 파일은 lfs에 올리겠다고 설정한 것입니다.

4. Git add .gitattributes 수행


Git lfs를 설정하면, .gitattributes라는 파일이 생기신 것을 확인할 수 있습니다. 이 파일에 Git LFS로 관리되는 파일 정보가 저장되기 때문에 Git에 이 변경사항을 꼭 추가해줘야합니다.

git add .
git commit -m "(메시지)"

예시에서는 ./sound 디렉터리까지 적용될 수 있도록 .으로 설정했습니다.

5. Push

이렇게 Commit까지 완료했다면 Remote에 Push하면 됩니다.

git push (remote 이름) (branch 이름)
ex) git push origin master

Working!


Github에 Push 한 것을 보면, 일반 Commit 처럼 올라가 있는 것을 볼 수 있습니다. 하지만, 실제로는 LFS가 적용이 되어있습니다.

주의할 점

Github에서 제공하는 LFS의 경우 무제한이 아니라는 점입니다. 여기를 참고하면, Github Free, Pro 계정의 경우 2GB까지 허용됩니다. 즉, 개인 자격일 때는 Pro로 업그레이드하더라도 계정당 2GB까지만 지원됩니다. 즉, 이번 글에서 사용한 파일의 경우 100MB가 넘어가지 않기 때문에 LFS에 올리면 괜히 계정의 제한 용량만 잡아먹는겁니다. LFS 제한량을 초과하지 않을려면 아래와 같은 내용을 지켜야할 것입니다.

1. 100MB 미만의 파일은 LFS를 사용하지 말 것
2. 불필요한 파일은 Git에 올리지 말 것 (.gitignore 적극 활용)

참고한 사이트

기타

On-Premise로 제공되는 Github Enterprise에서도 동일한 방법으로 작동합니다. 작동 확인하였습니다. 감사합니다.

profile
Have A Happy Coding Time!

1개의 댓글

comment-user-thumbnail
2024년 5월 16일

감사합니다. 덕분에 잘 처리했습니다.
저는 yarn pnp를 사용하고 있는데요. nextjs를 사용하고 있다보니 swc관련 바이너리 파일들이 용량이 꽤 나가더라구요. bitbucket을 사용할땐 큰 불편함이 없다가 github로 넘어오니 제약사항이 생기니 나감하던 중 이글을 보게 됬습니다.

도움 받고 갑니다.

답글 달기