InfoGrab Docs

리포지터리 크기 줄이기

요약

Git 리포지터리의 크기는 성능과 스토리지 비용에 상당한 영향을 미칠 수 있습니다. 리포지터리 크기에 대한 자세한 내용은 다음을 참조하세요: 이 방법을 사용하여 전체 Git 기록에서 대용량 파일을 제거합니다. 이 방법은 리포지터리에서 비밀번호나 키와 같은 민감한 데이터를 제거하는 데 적합하지 않습니다.

Git 리포지터리의 크기는 성능과 스토리지 비용에 상당한 영향을 미칠 수 있습니다. 압축, 하우스키핑 및 기타 요인으로 인해 인스턴스마다 약간씩 다를 수 있습니다.

리포지터리 크기에 대한 자세한 내용은 다음을 참조하세요:

리포지터리 기록에서 파일 제거#

이 방법을 사용하여 전체 Git 기록에서 대용량 파일을 제거합니다.

이 방법은 리포지터리에서 비밀번호나 키와 같은 민감한 데이터를 제거하는 데 적합하지 않습니다. 파일 내용을 포함한 커밋에 대한 정보는 데이터베이스에 캐시되어 리포지터리에서 제거된 후에도 계속 표시됩니다. 민감한 데이터를 제거하려면 블롭 제거에 설명된 방법을 사용하세요.

사전 요구 사항:

Warning

파일 제거는 파괴적인 작업입니다. 진행하기 전에 리포지터리의 백업이 있는지 확인하세요.

GitLab 리포지터리에서 파일을 제거하려면:

  1. 리포지터리 복사본이 포함된 프로젝트를 내보내고 다운로드합니다.

  2. 백업을 압축 해제하고 추출합니다:

    tar xzf project-backup.tar.gz
    
  3. --bare--mirror 옵션을 사용하여 리포지터리를 clone합니다:

    git clone --bare --mirror /path/to/project.bundle
    
  4. project.git 디렉터리로 이동합니다:

    cd project.git
    
  5. 원격 URL을 업데이트합니다:

    git remote set-url origin https://gitlab.example.com/<namespace>/<project_name>.git
    
  6. git filter-repo 또는 git-sizer를 사용하여 리포지터리를 분석합니다:

    • git filter-repo:

      git filter-repo --analyze
      head filter-repo/analysis/*-{all,deleted}-sizes.txt
      
    • git-sizer:

      git-sizer
      
  7. 다음 git filter-repo 옵션 중 하나를 사용하여 리포지터리 기록을 제거합니다:

    • --path--invert-paths를 사용하여 특정 파일을 제거합니다:

      git filter-repo --path path/to/file.ext --invert-paths
      
    • --strip-blobs-bigger-than을 사용하여 예를 들어 10M보다 큰 모든 파일을 제거합니다:

      git filter-repo --strip-blobs-bigger-than 10M
      

    자세한 예시는 git filter-repo 문서를 참조하세요.

  8. commit-map을 백업합니다:

    cp filter-repo/commit-map ./_filter_repo_commit_map_$(date +%s)
    
  9. mirror 플래그를 해제합니다:

     git config --unset remote.origin.mirror
    
  10. 변경 사항을 force push합니다:

    git push origin --force 'refs/heads/*'
    git push origin --force 'refs/tags/*'
    git push origin --force 'refs/replace/*'
    

    참조에 대한 자세한 내용은 Gitaly에서 사용하는 Git 참조를 참조하세요.

    [!note] 이 단계는 보호된 브랜치보호된 태그에 대해 실패합니다. 진행하려면 일시적으로 보호를 제거하세요.

  11. 다음 단계 전에 최소 30분을 기다립니다.

  12. 리포지터리 정리 프로세스를 실행합니다. 이 프로세스는 30분 이상 된 객체만 정리합니다. 자세한 내용은 정리 후 공간이 확보되지 않는 경우를 참조하세요.

리포지터리 크기 줄이기

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

Git 리포지터리의 크기는 성능과 스토리지 비용에 상당한 영향을 미칠 수 있습니다. 리포지터리 크기에 대한 자세한 내용은 다음을 참조하세요: 이 방법을 사용하여 전체 Git 기록에서 대용량 파일을 제거합니다. 이 방법은 리포지터리에서 비밀번호나 키와 같은 민감한 데이터를 제거하는 데 적합하지 않습니다.

Git 리포지터리의 크기는 성능과 스토리지 비용에 상당한 영향을 미칠 수 있습니다. 압축, 하우스키핑 및 기타 요인으로 인해 인스턴스마다 약간씩 다를 수 있습니다.

리포지터리 크기에 대한 자세한 내용은 다음을 참조하세요:

리포지터리 기록에서 파일 제거#

이 방법을 사용하여 전체 Git 기록에서 대용량 파일을 제거합니다.

이 방법은 리포지터리에서 비밀번호나 키와 같은 민감한 데이터를 제거하는 데 적합하지 않습니다. 파일 내용을 포함한 커밋에 대한 정보는 데이터베이스에 캐시되어 리포지터리에서 제거된 후에도 계속 표시됩니다. 민감한 데이터를 제거하려면 블롭 제거에 설명된 방법을 사용하세요.

사전 요구 사항:

Warning

파일 제거는 파괴적인 작업입니다. 진행하기 전에 리포지터리의 백업이 있는지 확인하세요.

GitLab 리포지터리에서 파일을 제거하려면:

  1. 리포지터리 복사본이 포함된 프로젝트를 내보내고 다운로드합니다.

  2. 백업을 압축 해제하고 추출합니다:

    tar xzf project-backup.tar.gz
    
  3. --bare--mirror 옵션을 사용하여 리포지터리를 clone합니다:

    git clone --bare --mirror /path/to/project.bundle
    
  4. project.git 디렉터리로 이동합니다:

    cd project.git
    
  5. 원격 URL을 업데이트합니다:

    git remote set-url origin https://gitlab.example.com/<namespace>/<project_name>.git
    
  6. git filter-repo 또는 git-sizer를 사용하여 리포지터리를 분석합니다:

    • git filter-repo:

      git filter-repo --analyze
      head filter-repo/analysis/*-{all,deleted}-sizes.txt
      
    • git-sizer:

      git-sizer
      
  7. 다음 git filter-repo 옵션 중 하나를 사용하여 리포지터리 기록을 제거합니다:

    • --path--invert-paths를 사용하여 특정 파일을 제거합니다:

      git filter-repo --path path/to/file.ext --invert-paths
      
    • --strip-blobs-bigger-than을 사용하여 예를 들어 10M보다 큰 모든 파일을 제거합니다:

      git filter-repo --strip-blobs-bigger-than 10M
      

    자세한 예시는 git filter-repo 문서를 참조하세요.

  8. commit-map을 백업합니다:

    cp filter-repo/commit-map ./_filter_repo_commit_map_$(date +%s)
    
  9. mirror 플래그를 해제합니다:

     git config --unset remote.origin.mirror
    
  10. 변경 사항을 force push합니다:

    git push origin --force 'refs/heads/*'
    git push origin --force 'refs/tags/*'
    git push origin --force 'refs/replace/*'
    

    참조에 대한 자세한 내용은 Gitaly에서 사용하는 Git 참조를 참조하세요.

    [!note] 이 단계는 보호된 브랜치보호된 태그에 대해 실패합니다. 진행하려면 일시적으로 보호를 제거하세요.

  11. 다음 단계 전에 최소 30분을 기다립니다.

  12. 리포지터리 정리 프로세스를 실행합니다. 이 프로세스는 30분 이상 된 객체만 정리합니다. 자세한 내용은 정리 후 공간이 확보되지 않는 경우를 참조하세요.