[github] 3GB 대용량 파일 git에 업로드하기 / lfs 사용법

문제

작년 2-2학기에 배웠던 컴퓨터 비전 수업의 파일을 github에 업로드하려고 했다. 원래는 PyCharm을 사용해서 하루 수업이 끝나면 바로 업로드를 했는데, 어느 순간 파일이 너무 커져서 업로드가 안되기 시작했다.

 

미루고 미루다.. 동아리에서 git을 잠시 배웠던 것에 자신감을 얻고 다시 도전해겠다 결심했다!

 

먼저 github에는 100MB 미만 파일까지 업로드하는 것은 문제없다. 단, 100MB가 넘어가면서부터 문제가 시작된다..

 

이 파일을 업로드하기 위해 작년부터 헤맸었는데, 드디어 방법을 찾아서 기록 겸 정리해본다!

 

해결 방법

(1) Git lfs를 설치한다

먼저 github에 대용량 파일을 업로드하기 위해서는 git lfs가 필요하다.

참고로 나는 window를 사용중이므로, 아래 링크에서 lfs를 다운받았다. 다른 운영체제를 사용중인 분들은 다른 글이나 방법도 찾아보기 바란다.

https://git-lfs.com/

 

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

 

(2) 올리고 싶은 파일들이 있는 폴더에서 git bash 켜기

올리고 싶은 파일들이 모여있는 폴더에 커서를 올리고 마우스 오른쪽 버튼을 눌러보자.(물론 git bash가 설치되어 있어야 한다.)

 

나는 윈도우 11로 업데이트를 해서인지, 바로 git bash로 작업하는 것이 뜨지 않았다. 그럴 때는 똑같이 마우스의 오른쪽 버튼을 클릭한 후 터미널에서 열기를 누른다.

 

그러면 window powershell이 뜰텐데, 이때 아래 토글을 눌러주면 GitBash가 있다. 그 친구를 눌러서 아래 과정을 작업하자.

 

(3) 해당 파일에 새로운 Git 저장소를 만들 때 사용하는 명령어 입력

git init

 

이제 해당 파일에 git fls를 설치하자

git lfs install

 

(4) github의 repositoty와 연결해주기

 

자신의 github에 미리 새로운 repository를 만들어두자. 그리고 그 repository와 해당 파일을 연결하는 명령어를 입력하자.

git remote add origin https://github.com/Andante-Kim/cv_learning.git

 

참고로 git bash에 붙여넣기를 하기 위한 방법은 ctrl+V가 아니다..!

이걸 몰라서 계속 타자로 쳤는데, 만약 git bash에 링크나 주소를 복사해서 붙여넣기 하고 싶은 경우 ctrl+shift+Ins를 사용하자.

 

또한 만약, 해당 repository 생성 시 README.md 파일을 같이 생성했다면, 아래 코드도 입력한 후 5단계로 넘어가자. 만약 branch를 master로 설정했다면 main을 master로 바꿔서 enter치면 된다.

git pull origin main

 

(5) 어떤 파일이 용량이 큰지 확인하기

만일 어떤 파일이 큰지 알고 있으면 이 코드는 생략해도 되지만, 일단 해보기를 권장한다.

find -type f -size +100M -exec ls -lh {} \;

 

이 코드를 입력했더니, 나는 4개의 파일이 100MB를 초과한다는 것을 알게 되었다.

 

(6) 찾은 파일을 track 해주기

큰 따옴표 안에 찾은 파일을 입력해주면 된다. 나는 찾은 파일이 4개이므로 해당 명령어를 파일 이름만 바꿔서 총 4번 실시했다.

git lfs track "./.venv/Lib/site-packages/jaxlib/xla_extension.pyd"

 

그러면 해당 파일 안에 .gitattributes 파일이 생성된다. 이 파일에는 lfs 파일의 정보가 담겨져 있다.

 

(7) .gitattribute를 먼저 push하자

아래 명령어를 순서대로 입력하면 된다.

git add .gitattributes
git commit -m "create .gitattributes"

(+) 큰따옴표 안에는 커밋 메시지를 작성하는 것이다. 알아서 수정해도 된다.

git push origin main

 


💡

위의 명령어를 입력했더니 나는 이런 오류가 발생했다.

error: fsrc refspec main does not match any
error: failed to push some refs to "https://github.com/Andante-Kim/cv_learning.git"

 

이건 branch에 main이 없어서 생긴 오류이다. 같은 메시지가 뜬다면 아래 명령어를 입력하자. 그리고 다시 "git push origin main"을 입력하고 enter치면 된다.

git branch -M main

 

만일 해당 오류가 생기지 않는다면 다음 단계로 넘어가면 된다.


 

이제 github의 repository를 확인해보자. 그러면 정상적으로 올라간 것을 알 수 있다.

 

(8) 중간 점검하기

untracked된 파일들을 알 수 있다.

git status

 

(9) 이제 남은 파일들을 업로드해주자

git add .

현재  파일에 있는 모든 파일을 add하라는 의미이다.

git commmit -m "upload all project"
git push origin main

 

이제 깃허브를 확인해보자! 아마 잘 올라갔을 것이다😁

 

하지만, 남은 파일들이 너무 많은 경우 또 다른 문제가 발생할 수 있다.

만약 github의 repository를 확인했는데 .gitattribute 이외에 아무 것도 올라와있지 않다면 아래를 참고하자.

 


💡

 

github에 자료를 올릴 때, 한번에 너무 많은 데이터의 양을 시도하면 아래와 같은 에러가 발생한다.

error: RPC failed; HTTP 400 curl 92 HTTP/2 stream 3 was not closed clenly: CANCEL (err 8)

 

해결책은 아주 간단하다.

 

아래와 같은 명령어를 입력하면 된다.

git config --global http.postBuffer 524288000

 

이제 다 됐다. 다시 push를 실행한다!

git push origin main

 

이제 모든 오류가 해결됐다.

 

repository를 확인해보자. 모든 파일이 아름답게 잘 올라간 것을 확인할 수 있다~

 


나를 이렇게 고생하게 만든 repository를 알고 싶다면, 아래 링크를 한번 들어가보자😚

https://github.com/Andante-Kim/cv_learning

 

GitHub - Andante-Kim/cv_learning: A repository for studying and experimenting with Computer Vision techniques, including image p

A repository for studying and experimenting with Computer Vision techniques, including image processing, deep learning, and OpenCV. - Andante-Kim/cv_learning

github.com

 


참고

https://velog.io/@sol_mi/%EB%8C%80%EC%9A%A9%EB%9F%89-%ED%8C%8C%EC%9D%BC-git%EC%97%90-%EC%97%85%EB%A1%9C%EB%93%9C%ED%95%98%EA%B8%B0

https://velog.io/@hiyunseok347/Git-Error-RPC-failed-HTTP-400-curl-22-The-requested-URL-returned-error-400

https://velog.io/@qlsl707/TIL-230517