본문 바로가기

VersionControl/Git

비트버킷 저장소 크기 줄이기

비트버킷 저장소 크기 줄이기

대용량 파일을 Bitbucket에 보관해야하는 경우 워크플로의 일부로 Git LFS (Git Large File Storage)를 도입하는 것이 좋습니다.

저장소 크기 제한

크기가 제한용량을 초과하면 저장소 세부 정보 패널에 경고가 표시된다.

1.0GB 초과

1.0GB 제한을 초과하는 동안 커밋 을 푸시하면 명령 줄에 경고가 표시된다.

$ git push 
Enumerating objects: 5, done. 
Counting objects: 100% (5/5), done. 
Delta compression using up to 12 threads 
Compressing objects: 100% (2/2), done. 
Writing objects: 100% (3/3), 332 bytes | 332.00 KiB/s, done. 
Total 3 (delta 0), reused 0 (delta 0) 
remote: This repository is currently 1.0 GB in size. If it exceeds 2 GB it will be put into read-only mode. 
remote: Learn how to reduce your repository size: https://confluence.atlassian.com/x/xgMvEw 
To https://bitbucket.org/example/monster.git 
    3db4505..0393b72 master -> master 
$ _

2.0GB 초과

$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 406 bytes | 406.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: b'Repository is over the size limit (2 GB) and will not accept further additions.
remote: 
remote: Learn how to reduce your repository size: https://confluence.atlassian.com/x/xgMvEw.
remote: '
To https://bitbucket.org/example/monster.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://user@bitbucket.org/example/monster.git'
$ _

5.0GB 초과

5.0GB 이상은 모든 변경이 거부된다.

마지막 푸시 실행 취소

기록을 다시 쓰려면 푸시 제한을 제거 하라.

잘못된 커밋이 포함된 분기를 해당 커밋 직전에 되감은 다음 저장소 크기를 제한용량 이하로 만들기 위해 마지막 커밋을 제거하라. 이 절차는 잘못된 커밋이 한 지점에만 있고 다른 지점으로 병합되지 않았다고 가정한다.

Warrning
영향을받는 분기를 사용하는 다른 사람에게 마지막 커밋을 실행 취소하고 있음을 공지하고, 해당 커밋을 다른 분기에 병합하지 않아야 한다.

Bitbucket의 원격 기록은 다음과 같습니다.

            branch
            |
o---o---o---o <= last commit in Bitbucket

로컬 기록은 다음과 유사 할 수 있다.

            branch
            |
o---o---o---o---o <= last local commit failed to push
        |
        reset to here and push

원격 지점 되돌리기

마지막 커밋을 포함하는 브랜치에서 :

  1. 로컬 커밋을 유지하기 위해 임시 분기를 만든다.
  2. 원래 분기를 마지막 분기 직전 커밋으로 재설정하라(또는 여러 커밋이 푸시된 경우 대용량 파일을 포함하는 잘못된 커밋 전까지).
  3. 새 Head를 Bitbucket으로 푸시한다.
  4. 로컬 변경 사항 복원 – 아직 푸시할 수 없으므로 먼저 대용량 파일을 제거한다.
    git branch <keeper>
    git reset --soft @{u}^
    git push --force
    git merge --ff-only <keeper>
    git branch -d <keeper>
    --soft옵션을 사용하면 아직 푸시하지 않은 커밋과 커밋하지 않은 변경 사항이 유지 되므로 대용량 파일을 제거한 후에  푸시할 수 있다. 유지하려는 변경 사항이 없으면 위의 명령 예에서 --hard옵션을 사용하고 Sepeps 1, 4 및 5를 건너 뛸 수 있다.

커밋 제거

이제 마지막 커밋을 제거한 뒤 가비지 수집을 실행하여 마지막 커밋이 완전히 제거되고, 저장소의 크기가 줄어들도록 지원 요청한다 .

Bitbucket의 원격 기록은 다음과 같다.

        branch
        |
o---o---o-/-o
            |
            prune this

대용량 파일 제거

푸시가 차단 해제되면 저장소에서 대용량 파일을 제거할 수 있다.
다음은 Git 저장소를 유지 관리하고 Git LFS 사용에 대한 자세한 정보를 제공하는데 도움이되는 몇 가지 리소스다.

추가 LFS 저장소 비용을 지불하지 않고 많은 대용량 파일을 유지하려면 대용량 파일을 다른곳에 두어야한다.
사용 가능한 옵션중 일부는 아래 대용량 파일 저장 옵션을 참조하라.

Warnning
대용량 파일이 제거되면 Bitbucket에서 저장소를 복제하는 것이 가장 좋다.
그렇지 않고 누군가가 강제 푸시를 수행하면 대용량 파일이 다시 푸시되고 문제가 시작한 곳으로 돌아간다.

대용량 파일 커밋 방지

실수로 대용량 파일을 저장소에 추가하지 않도록하기 위해 수행 할 수있는 몇 가지 작업이 있습니다.

  • 포함하고 싶지 않은 종류의 파일은 무시하도록 Git에 등록하라.
  • 대용량 파일 커밋이 생성되지 않도록 자동화를 설치하라.

대용량 파일 무시

로컬 저장소를 포함하는 디렉토리에서 호출되는 파일에 경로 이름 패턴을 추가하여 Git에게 커밋에서 파일을 제외하도록 지시 할 수 있다(.gitignore).

예를 들면 다음과 같다.

# File types to ignore
*.exe
*.bin
*.jar
*.war
*.mp3
*.mp4
# Directories to ignore
target/
.build/
.env/

일반적으로, Git에게 해당 조건의 파일을 무시하도록 등록할 수 있다 :

  • 아티팩트 빌드 – 모든 것을 디렉토리에 넣는 것이 가장 좋다.
    예를 들어 Maven은 이를 target디렉토리에 넣는다 .
  • IDE 설정 – 일반적으로 저장소에서 이러한 설정은 필요하지 않다 (예 : .idea디렉토리 무시) .
  • 의존성 – 의존성 캐시를 제외한다.
    예 : Python의 virtualenv 또는 노드의 로컬 패키지.
  • 미디어 파일 – git 저장소는 대용량 오디오 또는 비디오 파일을 보관하기에 좋은 장소는 아니다.

대용량 파일 커밋 차단

커밋에 대용량 파일이 포함되는 것을 방지하기 위해 커밋 마다 파일 크기를 확인 하는 로컬 후크를 설치하여 커밋이 너무 큰 경우 커밋을 거부 할 수 있다.

check_added_large_files 후크를 저장소에 복사해서 등록해라.
누구나 로컬 저장소의 사전 커밋 후크로 추가하여 설치할 수 있다.

ln -s check_added_large_files.py .git/hooks/pre-commit.py

저장소에서 스크립트의 사본을 원하는대로 작동하도록 변경할 수 있고, 모든이가 최신 로직을 얻을 수 있다.

대용량 파일을 저장하기 위한 옵션

Bitbucket 저장소는 소스 파일을 보관하기에 가장 좋은 장소다.
해당 소스에서 다른 파일을 생성 할 수있는 더 좋은 곳이 있다.
몇 가지 예가 있지만 사용 가능한 모든 옵션을 탐색하도록 권장한다.

이슈 저장소 사용

빌드 아티팩트를 저장하는 많은 서비스가 있으며 두 가지 인기있는 예는 다음과 같다.

  • Sonatype Nexus
  • JFrog Artifactory
    빌드 아티팩트를 이러한 저장소에 업로드하여 공유 할 수 있도록 빌드 프로세스를 구성하라.
    또한 .gitignore커밋에서 빌드 아티팩트를 제외하도록 구성되어 있는지 확인하라.

Docker 저장소 사용

Bitbucket 저장소가 실행 파일을 빌드하는데 사용되는 경우 Docker 이미지 로 빌드하는 것이 좋다.
빌드 프로세스는 이미지를 Docker Hub에 호스팅 된 Docker 저장소 또는 로컬 Docker 저장소로 푸시할 수 있다.

AWS S3 사용

대용량 미디어 파일을 Bitbucket 저장소에 저장하지 말고, 쉽게 다운로드 할 수 있는 S3 버킷에 업로드하라 .

LFS 사용

파일이 실제로 Bitbucket 저장소의 일부여야 하는 경우, 사용 가능한 대용량 파일 저장소를 사용하라.
필요한 경우 더 많은 저장 용량을 구입할 수 있다.

와일드 카드 패턴을 사용하여 특정 유형의 파일에 LFS를 사용하도록 Git에 지시하십시오.

git lfs track "<pattern>"

예를 들어 MP4 동영상에 LFS를 사용하려면 :

git lfs track "*.mp4"

'VersionControl > Git' 카테고리의 다른 글

github.com 프로젝트 참여 - 정리 메모  (0) 2020.02.13
비트버킷 저장소 크기 줄이기  (0) 2020.02.03
저장소 크기(history) 줄이기  (0) 2019.07.19
github.com 탈퇴, 재가입  (0) 2019.02.21
Git을 이용한 백업  (0) 2018.11.22
Command Line Git Import  (0) 2018.03.02