리포지터리 크기 줄이기
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
Git 리포지터리의 크기는 성능과 스토리지 비용에 상당한 영향을 미칠 수 있습니다. 리포지터리 크기에 대한 자세한 내용은 다음을 참조하세요: 이 방법을 사용하여 전체 Git 기록에서 대용량 파일을 제거합니다. 이 방법은 리포지터리에서 비밀번호나 키와 같은 민감한 데이터를 제거하는 데 적합하지 않습니다.
Git 리포지터리의 크기는 성능과 스토리지 비용에 상당한 영향을 미칠 수 있습니다. 압축, 하우스키핑 및 기타 요인으로 인해 인스턴스마다 약간씩 다를 수 있습니다.
리포지터리 크기에 대한 자세한 내용은 다음을 참조하세요:
리포지터리 기록에서 파일 제거#
이 방법을 사용하여 전체 Git 기록에서 대용량 파일을 제거합니다.
이 방법은 리포지터리에서 비밀번호나 키와 같은 민감한 데이터를 제거하는 데 적합하지 않습니다. 파일 내용을 포함한 커밋에 대한 정보는 데이터베이스에 캐시되어 리포지터리에서 제거된 후에도 계속 표시됩니다. 민감한 데이터를 제거하려면 블롭 제거에 설명된 방법을 사용하세요.
사전 요구 사항:
git filter-repo를 설치해야 합니다.- 선택 사항.
git-sizer를 설치합니다.
파일 제거는 파괴적인 작업입니다. 진행하기 전에 리포지터리의 백업이 있는지 확인하세요.
GitLab 리포지터리에서 파일을 제거하려면:
-
리포지터리 복사본이 포함된 프로젝트를 내보내고 다운로드합니다.
- 대규모 프로젝트의 경우 프로젝트 관계 내보내기 API를 사용할 수 있습니다.
-
백업을 압축 해제하고 추출합니다:
tar xzf project-backup.tar.gz -
--bare및--mirror옵션을 사용하여 리포지터리를 clone합니다:git clone --bare --mirror /path/to/project.bundle -
project.git디렉터리로 이동합니다:cd project.git -
원격 URL을 업데이트합니다:
git remote set-url origin https://gitlab.example.com/<namespace>/<project_name>.git -
git filter-repo또는git-sizer를 사용하여 리포지터리를 분석합니다:-
git filter-repo:git filter-repo --analyze head filter-repo/analysis/*-{all,deleted}-sizes.txt -
git-sizer:git-sizer
-
-
다음
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문서를 참조하세요. -
-
commit-map을 백업합니다:cp filter-repo/commit-map ./_filter_repo_commit_map_$(date +%s) -
mirror 플래그를 해제합니다:
git config --unset remote.origin.mirror -
변경 사항을 force push합니다:
git push origin --force 'refs/heads/*' git push origin --force 'refs/tags/*' git push origin --force 'refs/replace/*'참조에 대한 자세한 내용은 Gitaly에서 사용하는 Git 참조를 참조하세요.
[!note] 이 단계는 보호된 브랜치 및 보호된 태그에 대해 실패합니다. 진행하려면 일시적으로 보호를 제거하세요.
-
다음 단계 전에 최소 30분을 기다립니다.
-
리포지터리 정리 프로세스를 실행합니다. 이 프로세스는 30분 이상 된 객체만 정리합니다. 자세한 내용은 정리 후 공간이 확보되지 않는 경우를 참조하세요.
