본문 바로가기
Q&A2026년 7월 23일2분 읽기

git push 하니까 100MB 넘는 파일 때문에 거부당하는데 LFS로 옮기면 되나요

g
gitlfs_dohoon
조회 772댓글 3

학습용 모델 가중치 파일(.pt, 한 180MB)을 실수로 커밋했다가 push 하니 원격(github)에서 거부됩니다. GH001 exceeds file size limit 어쩌고 하면서요.

이미 커밋은 로컬에만 있고 push는 안 된 상태입니다. git lfs 를 설치하고 track 하면 될 것 같아서 git lfs install 하고 git lfs track "*.pt" 한 다음 다시 커밋했는데 여전히 같은 에러로 push가 막힙니다.

remote: error: File model/last.pt is 183.20 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: GH001: Large files detected.
error: failed to push some refs to 'github.com:me/proj.git'

track은 분명히 했는데 왜 아직도 일반 파일로 인식되는 걸까요? .gitattributes 에도 *.pt filter=lfs 라고 들어가 있는 걸 확인했습니다.

댓글 3

김김영삼3개월 전
track을 나중에 걸어서 그렇습니다. git lfs track은 '앞으로 새로 커밋되는' 파일에만 적용되지, 이미 히스토리에 일반 blob으로 박힌 파일을 소급해서 LFS로 바꿔주지 않습니다. 지금 그 .pt는 이전 커밋에 진짜 180MB blob으로 들어가 있어서, .gitattributes를 지금 추가해도 과거 커밋 안의 그 blob은 그대로라 push할 때 걸리는 겁니다.

아직 push를 안 했으니 제일 깔끔한 건 히스토리의 그 blob 자체를 LFS로 마이그레이션 하는 겁니다. git lfs migrate import --include="*.pt" --everything 하면 기존 커밋들의 .pt를 전부 LFS 포인터로 다시 씁니다(히스토리 재작성). 그 다음 push 하면 통과해요.

하기 전에 git lfs migrate info --everything 로 어떤 파일이 얼마나 잡히는지 먼저 확인하시고요. import는 커밋 해시를 바꾸니 혼자 쓰는 브랜치일 때 편하게 하세요. 아니면 애초에 모델 가중치를 git에 안 넣고 릴리스 아티팩트나 별도 스토리지에 두는 게 나은 경우가 많습니다.
ggitlfs_dohoon(guest)3개월 전
migrate import 돌렸더니 push는 됐는데, 이번엔 clone 받은 동료가 .pt가 실제 내용이 아니라 version https 로 시작하는 포인터 텍스트로만 받아진다고 하네요. 그쪽에서 git lfs install 이 안 돼 있어서 그런 건가요? 그리고 lfs 용량 쿼터라는 것도 있던데 무료 한도가 금방 차는 건 아닌지 걱정됩니다.
김김영삼3개월 전
맞습니다. 포인터 텍스트만 받아진 건 그 동료 쪽에 git-lfs가 초기화 안 돼서 smudge 필터가 안 돈 겁니다. 그쪽에서 git lfs install 하고 git lfs pull 하면 실제 파일로 채워집니다. clone 전에 lfs가 깔려 있었으면 자동으로 받아졌을 거고요.

쿼터는 실제로 신경 써야 합니다. github 기본 무료 LFS는 스토리지랑 월 대역폭이 각각 1GB로 꽤 빡빡해요. 모델 가중치를 여러 버전 커밋하면 스토리지가 금방 차고, 대역폭은 clone/pull 할 때마다 깎여서 CI가 매번 checkout 하면 순식간에 소진됩니다. 다 쓰면 그 달엔 pull 자체가 막혀요.

그래서 솔직히 수백 MB 모델 여러 버전엔 LFS가 잘 안 맞습니다. LFS는 수십 MB급 에셋(이미지, 폰트 같은)에 어울리고, 큰 가중치는 릴리스 에셋이나 S3 같은 외부 스토리지에 두고 스크립트로 받아오는 구조를 권합니다. 지금은 급한 대로 넘어가되 구조는 다시 고민해보세요.
Ctrl+Enter로 등록