[Github] 대용량 파일 공유

2023. 3. 17. 20:51Tools/GitHub

0. 참고 자료

 

 

GitHub의 대용량 파일 정보 - GitHub Docs

GitHub의 크기 제한 정보 GitHub는 파일 과 리포지토리 크기에 대한 하드 제한이 있지만 모든 Git 리포지토리에 풍부한 스토리지를 제공하려고 시도합니다. 사용자의 성능과 안정성을 보장하기 위해

docs.github.com

 


1. Github 용량 제한

 

GitHub은(는) 리포지토리에 허용되는 파일의 크기를 제한합니다.

 

GitHub는 100MB보다 큰 파일을 차단합니다.

 

50MB보다 큰 파일을 추가하거나 업데이트하려고 하면 Git에서 경고가 표시됩니다. (성공적으로 푸시되지만 커밋을 제거하고 별도의 방식을 사용하자. )

 


2. 리포지토리의 기록에서 파일 제거

 

본격적으로 대용량 파일을 푸시하는 방법에 대하여 알아보기 전에 잘못 푸시한 대용량 파일을 삭제하는 방법부터 알아보자.

 

3가지 케이스를 가정해서 각 케이스 별로 파일을 삭제하는 방법을 알아보겠다.

 

 


가. ADD O, COMMIT X, PUSH X

 

가장 단순하게 해결할 수 있다.

 

그냥 add한 대용량 파일만 unstaged한다.

 

    git reset HEAD [대용량 파일]

 

unstaged 상태로 변경된 대용량 파일을 다른 방식으로 처리하면 된다.

 


나. ADD O, COMMIT O, PUSH X

 

현재의 HEAD가 가리키는 커밋을 제거하고 이전의 커밋으로 되돌린다.

 

이 과정에서 대용량 파일만 커밋에서 제외하고 다른 변경사항은 그대로 유지한다.

 

1. Terminal을 엽니다. 현재 작업 디렉터리로 이동한다.

 

2. 파일을 제거하려면 git rm --cached를 입력합니다.

git rm --cached [대용량 파일]
# 원격 저장소에는 삭제되지만 로컬에는 남아있다.

 

 

3. 이전 커밋으로 되돌린다. 그리고 대용량 파일을 커밋 대상에서 제외한다.

git reset --soft HEAD~1
git reset HEAD [대용량 파일]
# 현재 로컬 브랜치를 하나 뒤에 있는 커밋으로 되돌리는 의미
# HEAD~ 뒤에 붙여준 슷자만큼 뒤에 있는 커밋으로 되돌릴 수 있다.
  • --soft : 커밋 취소된 병경사항을 staged 영역에 남긴다.

 

4. GitHub.com에 다시 커밋, 푸시한다.

git commit -m '커밋 메시지'
git push origin <브랜치이름>
# Push our rewritten, smaller commit

 

대용량 파일을 지속적으로 푸시하고 싶지 않다면 .gitignore 파일에 추가한다.

 


다. ADD O, COMMIT O, PUSH O

 

대용량 파일을 제거하고 다시 푸시한다.

 

git rm --cached [대용량 파일]
# 원격 저장소에는 삭제되지만 로컬에는 남아있다.

 

대용량 파일을 .gitignore 파일에 추가한다.

 

.git이 위치한 폴더에 .gitignore이라는 이름의 파일을 새로 만든다.

 

그곳에 무시하고 싶은 파일을 한 줄씩 띄어서 입력하면 된다.

 

data/neow.js <- 특정 파일

data/ <- data디렉터리 아래 모두

*.txt <- txt 파일 모두

!hello.txt <- hello.txt는 예외적으로 포함해줘!

// ./db_data와 같이 ./로 시작하면 인식이 안되는 경우가 있으니 사용하지 말자.

 

 

[Git] git ignore

1. git에 포함하고 싶지 않은 파일 예를 들어서 data/hello처럼 data 디렉터리 아래의 모든 파일들에 대하여 git에 포함하고 싶자않다면 어떻게 해야할까? 이때 .gitignore라는 파일을 만들어서 포함하고

ramen4598.tistory.com

 

git status # 대용량 파일이 tracking되고 있는지 확인한다. (없어야 한다)
git add . 
git commit -m '커밋 메시지'
git push origin <브랜치이름>

대용량 파일이 git에서 더 이상 인식하지 않는 것을 확인한 후 새로 commit, push 한다.

 


3. 대용량 파일 공유

 

50MB보다 큰 파일의 경우 일반적인 방법으로 Github에 푸시할 수 없다.

 

혼자 작업하는 경우 어디에 넣어서 가지고 다니든지 상관없지만 Github을 통해서 협업하는 경우 대용량 파일을 팀원들과 공유하기 위해서는 어떻게 공유할지 신경을 써야 한다.

 


가. Git LFS란?

 

Git Large File Storage(Git LFS)는 Git이 대용량 파일을 효율적으로 관리할 수 있도록 하는 오픈소스 확장 프로그램이다.

 

Git LFS를 사용하면 Git 저장소에서 대용량 파일을 제거할 수 있고 대신 파일의 포인터로 저장할 수 있다.

 

Git LFS를 사용하려면 Git LFS를 설치하고 저장소에 대용량 파일을 업로드한다.

 

저장소는 Git LFS 서버로 대용량 파일을 업로드하고 파일의 포인터를 저장한다.

 

그리고 다른 사용자가 클론할 때 Git LFS 서버에서 대용량 파일을 다운로드한다.

 

Git LFS는 저장용량과 더불어 대역폭을 고려해야 한다.

 

Git 대용량 파일 스토리지를 사용하는 모든 계정은 무료 스토리지의 1GB 및 매월 무료 대역폭 1GB를 받습니다. 대역폭 및 스토리지 할당량이 충분하지 않은 경우 Git LFS의 추가 할당량을 구매하도록 선택할 수 있습니다.

 

대역폭이란 LFS에서 파일을 다운로드할 경우 파일의 용량만큼 소모된다.

 

만약 주어진 대역폭보다 많이 사용하고 결제를 하지 않는다면 곤란한 일을 겪을 수 있다.

 

LFS가 저장소의 정상적인 운영에 지장을 준다. (푸시 못하는 등등 문제 발생)

 

그래서 LFS를 삭제하려고 하면 전체 저장소를 삭제해야 한다.

 

자신 없으면 google drive나 dropbox 같은 다른 방식으로 대용량 파일을 공유하자.

 


'Tools > GitHub' 카테고리의 다른 글

[Github] Branch Protection rules  (0) 2023.04.11
[Github] Git flow  (0) 2023.04.11
[Github] conflict 해결하기  (1) 2023.03.06
[Github] issue  (0) 2023.02.27
[Github] action  (0) 2023.02.27