[플러터] git lfs 로 대용량 파일 깃허브 업로드
참고 내용
[플러터] 대용량 파일 깃허브 업로드하기 (안드로이드 스튜디오)
대용량 파일 깃허브 업로드(안드로이드 스튜디오) 플러터 공부를 하다가 만들어둔 작업물들을 깃허브에 올리려고 하는데, 파일 용량이 크고, 파일 갯수도 많아서 GUI로 업로드가 안 된다. 이전에
puppy-foot-it.tistory.com
Git LFS
Git Large File Storage
Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server like GitHub.com or GitHub Enterprise.
git-lfs.com
GIT LFS (Large File Storage)는 Git에서 대용량 파일을 관리하기 위한 익스텐션이다. Git은 기본적으로 소규모 파일을 효율적으로 관리하도록 설계되었지만, 미디어 파일, 큰 데이터 파일 등 용량이 큰 파일은 저장소의 크기를 늘리고, 복제 및 커밋 속도를 저하시킬 수 있다. Git LFS는 이러한 문제를 해결하기 위해, 대용량 파일을 별도의 저장소에 저장하고 Git 저장소에는 해당 파일의 참조만 저장하는 방식으로 동작한다.
[GIT LFS를 이용하여 깃허브에 업로드 하는 법 단계]
단계 | 설명 |
1 | Git LFS 설치 |
2 | Git LFS 초기화 |
3 | 특정 확장자 추적 설정 |
4 | 파일 추가 & 커밋 |
5 | GitHub에 푸시 |
Git LFS 사용하기
먼저 Git LFS를 사이트에 접속하여 다운로드하고 다운로드 된 설치 파일을 실행하여 설치한다.
그리고 안드로이드 스튜디오에서 터미널을 실행하고
1. 업로드할 경로로 이동
필자의 경우, 플러터 작업 폴더인 my_flutter 폴더 내의 파일 전체를 업로드할 것이므로, 상위 디렉터리로 이동 (cd ..)
2. Git LFS 초기화
git init
3. GitHub 저장소 연결
git remote add origin https://github.com/사용자명/저장소명.git
※ error: remote origin already exists. 에러가 발생한다면
git remote set-url origin https://github.com/사용자명/저장소명.git
4. Git LFS를 현재 프로젝트에 설치
git lfs install
5. 특정 확장자 추적
git lfs track "*.png" "*.mp4"
▶ 확장자가 .png, .mp4인 파일은 Git LFS로 관리하도록 설정.
예: 이미지나 동영상 같은 큰 파일은 일반 Git 대신 LFS를 통해 저장.
6. track 명령이 만든 .gitattributes 파일을 Git에 추가
git add .gitattributes
▶ 이 파일은 "이런 확장자는 LFS로 처리해" 라고 알려주는 설정 파일
7. 현재 폴더의 모든 변경사항을 Git에 추가
git add .
▶ 현재 폴더의 모든 변경사항을 Git에 추가. (단, .png, .mp4 등은 .gitattributes 설정대로 LFS로 처리)
8. 추가한 내용 커밋
git commit -m "Add project with large assets"
▶ "변경 내용을 하나의 버전으로 저장"하는 것이며, 커밋 메시지도 함께 적는다.
9. GitHub 저장소(origin)에 커밋한 내용 업로드
git push -u origin main
▶ GitHub 저장소(origin)에 지금 커밋한 내용을 업로드. -u는 "앞으로 기본 브랜치를 main으로 지정해줘"라는 의미.
커밋 실패 시
상황1. 커밋을 실패하여 기존 내용 삭제하고 처음부터 다시 시작
1. 기존 Git 흔적 삭제 (완전 초기화)
rm -rf .git .gitattributes .gitignore
▶ 이 명령을 실행하면 Git이 만든 설정과 히스토리 삭제
※ PowerShell 일 경우
Remove-Item -Recurse -Force .git, .gitattributes, .gitignore
2. Git LFS 캐시 초기화 (선택)
git lfs uninstall
▶ Git LFS 설정을 초기화. 꼭 필요하진 않지만, 새로 시작하고 싶을 때 사용
3. 완전 새로 시작
git init
git remote add origin https://github.com/사용자명/저장소명.git
git lfs install
git lfs track "*.png" "*.mp4" "*.pdf"
git add .gitattributes
git add .
git commit -m "처음부터 새로 커밋"
git push -u origin main
만약, master (root-commit) 이라고 되어 있다면,
git push -u origin main 가 아니라,
git push -u origin master
추가 에러
★ 만약 아래와 같은 에러를 받았다면 (대용량 전송 관련 에러)
error: RPC failed; HTTP 500 curl 22 The requested URL returned error: 500
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly
▶ GitHub 서버와의 통신 중 대용량 데이터를 전송하다가 연결이 끊긴 경우로, 아래 두 가지를 확인해야 한다.
- Git에 대용량 전송 허용 설정
- Git LFS를 제대로 설정했는지 확인
[Git에 대용량 전송 허용 설정]
Git은 기본적으로 큰 파일이나 많은 데이터를 푸시할 때 제한이 있다. 아래 명령어로 설정을 늘려야 한다.
git config --global http.postBuffer 524288000
git config --global http.maxRequestBuffer 1000000000
git config --global core.compression 0
명령어 | 의미 |
http.postBuffer 524288000 | HTTP로 한 번에 보낼 수 있는 최대 버퍼 용량 (500MB) |
http.maxRequestBuffer 1000000000 | 요청 크기 제한 해제 (1GB) |
core.compression 0 | 전송 중 압축을 하지 않도록 설정 (속도 향상 가능) |
[Git LFS를 제대로 설정했는지 확인]
PDF나 .mp4, .png 등 100MB 이상의 파일은 GitHub에서 직접 푸시할 수 없기 때문에, 반드시 Git LFS를 써야 한다.
이미 git lfs install과 git lfs track을 했더라도, .gitattributes에 잘 등록됐는지, Git이 해당 파일들을 LFS로 인식하는지 확인해야 한다.
git lfs track "*.pdf"
git add .gitattributes
git add *.pdf
git commit -m "Track PDF with LFS"
git push -u origin master
그리고 나서,
커밋 실패 시 안내 상황을 따라하면 된다.
이렇게 대용량, 다량의 폴더도 업로드 완료!