스터디/Etc

Github LFS (대용량 처리)

Dalmangyi 2025. 9. 30.

프로젝트를 하다보면 대용량 파일(Large File System)을 다룰때가 있습니다.

github를 이용 하다보면 1개의 파일당 50메가 이상을 대용량이라고 취급하고 있습니다.

 

iOS를 개발하다보면 솔루션 회사가 만드는 framework 파일, a파일이 주로 대용량 파일인 경우가 많습니다. (아키텍처별로 빌드를 안해주기 때문에 ....)

 

remote: warning: File SampleProject/Libs/aaa.framework is 65.20 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
remote: error: File SampleProject/Libs/bbb.framework is 246.80 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: File SampleProject/Libs/ccc.framework is 109.59 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
! [remote rejected] main -> main (pre-receive hook declined)

 

50메가가 초과할때는 경고가 뜨고 push가 가능합니다.

100메가 초과시 서버에서 거절됩니다.

 

 

 

github에서 결제쪽으로 가면 Git LFS에서 얼마나 사용했는지, 저장된 용량은 얼마나 되었는지 알 수 있습니다. (바로 갱신되진 않습니다.)

 

 

 

 

LFS 은 어떻게 판단되는가?

로컬로 파일을 관리하고 싶거나 github에서 가용가능한 용량을 넘을 수도 있기 때문에

파일이 자동으로 선택되진 않습니다. 

.gitignore로 제외된 파일을 선택한것처럼 

lfs도 .gitattributes파일에서 설정합니다.

 

 

 

 

LFS 적용방법

//macos에 설치
$brew install git-lfs

//git에 lfs 초기화 설정
$git lfs install

 

git-lfs 설치후에 git에 lfs 를 설정해줍니다.

 

 

 

 

 

.gitattributes 파일 작성방법은?

단순히 파일명이 아닌 경로를 이용한 path형식으로도 가능합니다.

저는 프로젝트 내에 있는 a 파일하고, 
framework파일과 framework안에 있는 파일.

xcframework 파일과 xcframework 안에 있는 파일 모두를 세팅해뒀습니다.

# 정적 라이브러리
*.a filter=lfs diff=lfs merge=lfs -text

# 프레임워크 내부 모든 파일
*.framework/** filter=lfs diff=lfs merge=lfs -text
**/*.framework/** filter=lfs diff=lfs merge=lfs -text

# XCFramework
*.xcframework/** filter=lfs diff=lfs merge=lfs -text
**/*.xcframework/** filter=lfs diff=lfs merge=lfs -text

ios 개발할대는 framework 안이나 xcframework 가 파일형태로 되어 보이지만 실제로는 내부에 파일들을 가지고 있는 형태여서 재귀형식(/**)으로 등록해줘야 합니다.

 

 

이렇게 파일 내용을 직접 적어도 되지만 대들 파일이 몇개 안되기 때문에 

$git lfs track "aa.zip"

명령어를 직접 쳐서 파일을 1개씩 등록하는 경우도 많습니다.

 

 

이렇게 적고 

.gitattribute 파일을 commit해줍니다.

그다음에 lfs로 등록하려는 파일들이나 일반 파일도 commit하고 push 해주시면 됩니다.

 

 

 

현재 적용된 목록 보기

$git lfs ls-files

 

 

 

저장은 어떤식으로 되는가?

주로 git에서는 텍스트를 이용한 비교를 많이 하곤 합니다. 

그래서 큰 파일들의 경우 hex값으로 변경해서 비교하지 않고, 파일을 sha256을 통해서 비교하고 있고, 

우리가 접근가능한 git에는 파일포인터만 업로드 되어 있습니다.

version https://git-lfs.github.com/spec/v1
oid sha256:4b825dc642cb6eb9a060e54bf8d69288fbee4904...
size 246800123

 

 

 

요금제별 LFS 사용량

Github에서는 10년전만해도 LFS에 대해서 반응하지 않더니

저장소를 무료로 private로 변경할 수 있게 해준 후부터는 

LFS를 10기가로 제한하고 있습니다.

물론 1달 단위이고, 요금제에 따라 사용가능한 용량이 차이가 납니다.

대용량 샘플이랑 문서 파일은 주로 nas에 저장하고, 소스코드 관련된것만 github에 저장하니

왠만한 회사 프로젝트도 아직은 10기가를 넘어본적이 적네요..

 

 

 

 

 

 

댓글