Git LFS 사용기 (100mb 이상의 파일 Github에 올리기)

jinwook4217·2020년 3월 30일
4

유니티에서 웹에서 사용하고 있는 firestore유저 데이터베이스에 접근하기위해 이것 저것 알아보던 중 최근 업데이트된 firebase sdk에 firestore를 드디어 지원한다는 소식을 듣고 현재 프로젝트에 적용해보기로 하였습니다.

기존의 firebase sdk 6.6.0 버전에서 6.12.0 버전으로 프로젝트를 업그레이드도 하고 firestore도 정상 동작하는 것을 확인하고 git push를 하는 순간 에러가 발생하였습니다.

에러

! [remote rejected] feat/upgrade-firebase -> feat/upgrade-firebase (pre-receive hook declined)

git kraken 에서 에러를 확인했을 때에는 위 문구밖에 나오지 않아서 터미널에서 git push를 하여 정확한 원인을 살펴보니 파이어베이스 동적 라이브러리 파일(.so) 하나가 255mb 로 100mb 를 초과하여 에러 메세지를 던지고 있었습니다.

알고보니 Github 정책상 push하는 파일크기가 50mb 가 넘어가면 경고를 주고 100mb 가 넘어가면 에러를 표시하며 push가 거절됩니다. 이럴 경우에 Git LFS를 사용할 수 있습니다.

Git LFS(Large File Storage)


Git Large File Storage(LFS)는 파일 내용을 원격 서버에 저장하는 동안 큰 파일을 Git 내부의 텍스트 포인터로 대체합니다.

git lfs 공식 홈페이지의 원리 설명

사용법


  1. git lfs를 사용하기 위해서는 우선 git lfs를 설치해야 합니다. git lfs 홈페이지에서 설치 프로그램을 다운받아 설치하거나 brew install git-lfs 명령어로 설치할 수 있습니다.
  2. git lfs를 적용할 프로젝트 폴더로 이동하여 다음 명령어를 실행합니다.
$ git lfs install
  1. git lfs로 관리할 파일을 지정해줍니다.
// psd 확장자 모두를 lfs로 관리
$ git lfs track "*.psd"
        
// 특정 파일만 lfs로 관리
$ git lfs track "Assets/Firebase/Plugins/x86_64/FirebaseCppApp-6_12_0.so"
  1. 관리중인 내용이 정의된 .gitattributes 파일도 추적해줍니다.
$ git add .gitattributes
  1. 이후로는 평소 git을 사용하는 것처럼 commit하고 push하면 됩니다.


처음에 관리할 파일을 지정해줄때 git lfs track "*.so" 로 모든 .so확장자를 설정했었는데 어떤 문제인지는 모르겠지만 계속 push할 때 에러가 발생했었습니다. 나중에 다시 찾아봐야겠다 하고 일단 각자 프로젝트에서 firebase sdk를 따로 업그레이드하고 git ignore로 설정파일을 추적하지 말까, 아니면 push할때 파일 크기 제한이 없는 bitbucket으로 다시 갈아탈까 생각도 했었습니다. 하지만 팀 전체가 git corporation을 사용하고 있어서 다시 한번 시도해보며 문제가 되는 하나의 파일만 lfs가 관리할 파일로 지정해주니 문제가 해결되었습니다.

장점은 Git workflow에 전혀 영향을 주지않고 평소와 똑같이 push하면 자동으로 처리되어서 사용하는데 전혀 불편함이 없었습니다.

참고 자료


profile
유니티 개발을 조금씩 해왔습니다.

1개의 댓글

comment-user-thumbnail
2021년 11월 9일

저 역시 *.so 확장자로 설정하였으나, 파일을 추적하지 못하는 문제가 있었습니다.

답글 달기