Internet Home

Stay hungry, stay foolish

[Git] LFS를 통해 Github에 대용량 파일을 올려보자

조회 :
Posted on By 건호 김

들어가기에 앞서

LFS를 통해 Github에 대용량 파일을 올리는 방법에 대해 작성한 글입니다.

Github

저번 학기 컴퓨터비전개론 강의에서 했던 과제를 github에 올리고 있었습니다. 어찌 하다보니 좀 늦게 올리게 되었습니다. 아무튼, 처음에 github에서 직접 과제를 한 디렉토리를 올리려고 했지만 실패하였습니다.

image

에러 메시지를 읽어보니 파일이 너무 용량이 크다고 합니다. 이러한 에러의 이유는 Git이라는 버전 관리 시스템은 50MB 이상부턴 경고를, 100MB 이상부턴 push할 때 특수한 설정을 해줘야 합니다.

용량 제한의 이유

git은 버전 관리 시스템입니다. Angular commit convention에서 알 수 있듯이, commit은 작은 단위로 날려야 합니다. feat, fix, .. Docs 등등..으로 말이죠. 심지어 commit message tag중 style이라는 tag는 줄 들여쓰기를 바꿀 때 사용합니다. 근데 저는 100MB가 넘는 폴더를 한 번에 올렸기 때문에 push가 거절되었습니다. 아래는 Angular commit message convention인데, 한 번 읽어보시면 좋을 것 같습니다. link : https://www.conventionalcommits.org/en/v1.0.0-beta.4/ 아무튼 저는 git 기준 대용량 폴더를 push하고 싶기에, 현재 상황을 해결해야 합니다. 현재 문제를 타파하기 위해 Git의 LFS을 사용합니다.

LFS

Large File System의 약자입니다. Git repository는 최대 500MB의 용량으로 제한됩니다만, LFS를 활용하면 하나의 파일당 5GB까지 관리할 수 있습니다. 이를 활용하면 문제를 해결할 수 있게 될 것 같습니다.

LFS 설치

일단 LFS를 설치해야 할 것 같습니다. 대용량 폴더/파일의 상위 디렉토리로 먼저 갑시다. 2024-computer-vision-hw repositoriy에 hw4라는 대용량 파일(디렉토리)을 추가해야 하므로 먼저 git clone 명령어를 통해 repository를 내 local로 옮겨옵니다.

git clone <URL>

clone한 repository에 작업을 합니다. Window 기준 아래 명령어를 통해 LFS를 설치합니다.

git lfs install

MacOs는 Homebrew (처음 들어 봅니다 .. Mac 사용자가 아닌지라..)를 통해 설치할 수 있다고 합니다.

brew install git-lfs
git lfs install

Linux는 패키지 매니저를 사용해서 설치할 수 있다고 하네요. sudo apt 바로 그겁니다.

sudo apt-get install git-lfs
git lfs install

Clone을 하지 않고 merge를 통해선?

Conflict만 잘 해결한다면 당연히 가능합니다. 일단 local에서 현재 내가 github에 올리고 싶은 디렉토리를 git이 관리할 수 있도록 만들어 줘야 합니다. 이는 git init 명령어를 통해 가능합니다. 맨 처음 init을 하면 local에는 master라는 branch로 만들어 질 것인데, github의 main과 대응되는 branch입니다. 이름을 변경하지 않고 작업을 수행한다면, github repository에 main branch에 폴더가 올라가는 것이 아닌, master라는 새로운 branch가 생성되고, 그 branch에 폴더가 올라갈 것입니다. 이를 참고하고 결정해주세요. 저는 별도의 branch를 사용하지 않을 것이기에, 이름을 main으로 변경해주었습니다. 그래야 main branch와 merge가 될 것이니까요. 저는 branch -m 명령어를 통해 branch 이름을 변경해주었습니다.

git init
git branch -m main

이후 merge 작업을 수행하시면 됩니다.

.gitattributes

제가 별도의 설정이 없으면 100MB가 넘는 파일은 git으로 관리할 수 없다고 위에서 했습니다. 그러면 별도의 설정을 해주어야 하는데, 이는 LFS를 통해 “.gitattributes”라는 파일을 만들 수 있고, 이를 통해 Git으로 대용량 파일을 관리할 수 있습니다.

git lfs track "hw4/*"

위 명령어는 hw4라는 파일은 용량이 크니, LFS로 관리할 것이라는 의미입니다. 이후 ls -al을 통해 “.gitattributes” 파일이 만들어져 있는지 체크해봅시다.

이 파일을 열었을 때,

hw4/* filter=lfs diff=lfs merge=lfs -text

와 같은 내용이 있다면, 성공적입니다. 저는 vi 명령어를 통해 확인해주었습니다.

vi .gitattributes

이후, .gitattributes와 함께 내가 push하고 싶은 파일을 add하면 됩니다.

git add .gitattributes
git add hw4/
git commit -m "hw4 LFS commit"

Git과 GitHub의 연동

이제 staging까지 완료했으니, local과 원격 저장소와 연결을 해야 합니다. 저는 원격 저장소를 origin이라는 별칭으로 부르겠습니다. LFS 설정을 완료했기에 origin에 나의 main branch를 push하면 error가 발생하지 않을 것입니다.

git remote add origin <remote-repository-URL>
git push origin main

요약

git은 작은 크기의 소스 코드를 관리하는 버전 시스템입니다. 이러한 목적성에 걸맞게, 100MB (대용량 파일)부턴 특수한 설정을 하지 않으면 관리를 할 수 없습니다. 이러한 문제를 해결하기 위해 LFS (Large File System)을 사용합니다. LFS를 사용해서 .gitattributes 파일을 만들고, 내가 push하고자 하는 파일을 tracking해야 합니다.

참고 : link : https://guide.ncloud-docs.com/docs/sourcecommit-use-lfs