유니티에서 웹에서 사용하고 있는 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 Large File Storage(LFS)는 파일 내용을 원격 서버에 저장하는 동안 큰 파일을 Git 내부의 텍스트 포인터로 대체합니다.
git lfs 공식 홈페이지의 원리 설명
brew install git-lfs
명령어로 설치할 수 있습니다.$ git lfs install
// psd 확장자 모두를 lfs로 관리
$ git lfs track "*.psd"
// 특정 파일만 lfs로 관리
$ git lfs track "Assets/Firebase/Plugins/x86_64/FirebaseCppApp-6_12_0.so"
.gitattributes
파일도 추적해줍니다.$ git add .gitattributes
처음에 관리할 파일을 지정해줄때 git lfs track "*.so"
로 모든 .so확장자를 설정했었는데 어떤 문제인지는 모르겠지만 계속 push할 때 에러가 발생했었습니다. 나중에 다시 찾아봐야겠다 하고 일단 각자 프로젝트에서 firebase sdk를 따로 업그레이드하고 git ignore로 설정파일을 추적하지 말까, 아니면 push할때 파일 크기 제한이 없는 bitbucket으로 다시 갈아탈까 생각도 했었습니다. 하지만 팀 전체가 git corporation을 사용하고 있어서 다시 한번 시도해보며 문제가 되는 하나의 파일만 lfs가 관리할 파일로 지정해주니 문제가 해결되었습니다.
장점은 Git workflow에 전혀 영향을 주지않고 평소와 똑같이 push하면 자동으로 처리되어서 사용하는데 전혀 불편함이 없었습니다.
저 역시 *.so 확장자로 설정하였으나, 파일을 추적하지 못하는 문제가 있었습니다.