Git의 Blob 스트리핑 이해
Git에서는 대용량 파일을 관리하는 것이 어려울 수 있으며, 특히 작업 복사본에 더 이상 필요하지 않은 경우 더욱 그렇습니다. BFG 및 Git Filter-Repo와 같은 도구는 저장소 기록에서 이러한 대용량 파일을 제거하기 위한 솔루션을 제공합니다. 그러나 Git Filter-Repo를 사용하여 BFG와 동일한 결과를 얻는 것은 까다로울 수 있습니다.
이 문서에서는 BFG 명령을 복제하는 방법을 살펴봅니다. --스트립-블롭-보다 큰 것 Git Filter-Repo를 사용합니다. 우리는 일반적인 문제를 해결하고 아직 사용 중인 파일을 실수로 제거하지 않고 저장소를 효과적으로 정리할 수 있도록 단계별 가이드를 제공할 것입니다.
명령 | 설명 |
---|---|
from git import Repo | GitPython 라이브러리의 Repo 클래스를 가져와 Git 리포지토리와 상호 작용합니다. |
git_filter_repo import RepoFilter | 리포지토리 Blob 필터링을 위해 git-filter-repo에서 RepoFilter 클래스를 가져옵니다. |
repo = Repo(repo_path) | 지정된 저장소 경로를 가리키는 Repo 객체를 초기화합니다. |
RepoFilter(repo).filter_blobs(filter_large_blobs) | 사용자 정의 필터 기능을 적용하여 저장소에서 큰 Blob을 제거합니다. |
git rev-list --objects --all | Blob, 트리 및 커밋을 포함하여 저장소의 모든 개체를 나열합니다. |
git cat-file --batch-check | 크기를 포함하여 개체에 대한 자세한 정보를 제공합니다. |
xargs -n 1 git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT | xargs를 사용하여 식별된 각 대형 Blob에 git filter-repo 명령을 적용합니다. |
제공된 스크립트의 작동 방식
Python 스크립트는 GitPython 라이브러리를 활용하여 Git 저장소와 상호 작용합니다. 저장소는 다음을 사용하여 초기화됩니다. from git import Repo 그리고 repo = Repo(repo_path), 지정된 저장소 경로를 가리킵니다. 그런 다음 스크립트는 필터 기능을 정의합니다. filter_large_blobs(blob) 10MB보다 큰 blob을 식별합니다. 이 필터는 다음을 사용하여 적용됩니다. 삼, 이는 크기 제한을 초과하는 blob이 저장소 기록에서 제거되도록 보장합니다.
쉘 스크립트는 Git 명령과 쉘 유틸리티를 사용하여 비슷한 목표를 달성합니다. 다음을 사용하여 저장소 디렉토리로 이동합니다. cd $REPO_PATH 다음을 사용하여 모든 개체를 나열합니다. git rev-list --objects --all. 각 객체의 크기는 다음과 같이 확인됩니다. git cat-file --batch-check. 지정된 크기 제한보다 큰 개체는 다음을 사용하여 필터링 및 처리됩니다. xargs 신청하다 git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT 식별된 각 대형 블롭에 적용됩니다. 이 방법은 저장소에서 큰 blob을 효과적으로 제거하여 불필요한 큰 파일 없이 깨끗한 기록을 보장합니다.
Python을 사용하여 크기별로 Git Blob 필터링
큰 blob을 필터링하기 위한 Python 스크립트
# Import necessary modules
import os
from git import Repo
from git_filter_repo import RepoFilter
# Define the repository path and size limit
repo_path = 'path/to/your/repo'
size_limit = 10 * 1024 * 1024 # 10 MB
# Initialize the repository
repo = Repo(repo_path)
# Define a filter function to remove large blobs
def filter_large_blobs(blob):
return blob.size > size_limit
# Apply the filter to the repository
RepoFilter(repo).filter_blobs(filter_large_blobs)
쉘 스크립트를 사용하여 대규모 Git Blob 식별 및 제거
Git의 Blob 관리를 위한 쉘 스크립팅
#!/bin/bash
# Define repository path and size limit
REPO_PATH="path/to/your/repo"
SIZE_LIMIT=10485760 # 10 MB
# Navigate to the repository
cd $REPO_PATH
# List blobs larger than the size limit
git rev-list --objects --all |
git cat-file --batch-check='%(objectname) %(objecttype) %(objectsize) %(rest)' |
awk '$3 >= $SIZE_LIMIT {print $1}' |
xargs -n 1 git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT
echo "Large blobs removed from the repository"
고급 Git 필터-Repo 옵션 탐색
하는 동안 git filter-repo --strip-blobs-bigger-than 대용량 파일을 제거하는 데 효과적이며 저장소 정리를 사용자 정의하는 추가 옵션이 있습니다. 예를 들어 다음을 사용할 수 있습니다. --path 작업을 특정 파일이나 디렉터리로 제한합니다. 이를 통해 Blob 제거를 위해 저장소의 특정 영역만 대상으로 지정할 수 있습니다. 또 다른 유용한 옵션은 --invert-paths, 작업에서 지정된 경로를 제외하여 어떤 파일이 그대로 유지되는지에 대한 더 많은 제어를 제공합니다.
게다가, 당신은 결합할 수 있습니다 --strip-blobs-bigger-than ~와 함께 --analyze 변경 사항을 적용하기 전에 미리 봅니다. 이렇게 하면 제거될 항목에 대한 자세한 보고서를 제공하여 의도하지 않은 삭제를 방지하는 데 도움이 됩니다. 이러한 고급 옵션을 활용하면 저장소 유지 관리 작업의 유연성과 정확성이 향상되어 보다 깨끗하고 효율적인 프로젝트 기록이 보장됩니다.
Git Filter-Repo에 대해 자주 묻는 질문
- 무엇을 git filter-repo --strip-blobs-bigger-than 하다?
- 저장소 기록에서 지정된 크기보다 큰 Blob을 제거합니다.
- 어떻게 --invert-paths 일하다?
- 지정된 경로를 필터 처리에서 제외합니다.
- 변경 사항을 적용하기 전에 미리 볼 수 있나요?
- 예, 사용 중입니다 --analyze 변경 사항에 대한 자세한 보고서를 제공합니다.
- 특정 파일이나 디렉터리를 어떻게 대상으로 지정합니까?
- 사용 --path 작업을 특정 경로로 제한하는 옵션입니다.
- 의 목적은 무엇입니까? RepoFilter 파이썬 수업?
- 이를 통해 저장소에 사용자 정의 필터를 적용할 수 있습니다.
- 변경사항을 취소하는 방법이 있나요? git filter-repo?
- 변경 사항이 적용되면 쉽게 취소할 수 없습니다. 항상 저장소를 먼저 백업하십시오.
- 무엇을 git rev-list --objects --all 하다?
- Blob, 트리 및 커밋을 포함하여 저장소의 모든 개체를 나열합니다.
- 왜 사용합니까? xargs ~와 함께 git filter-repo?
- xargs 제거 대상으로 식별된 대형 얼룩과 같은 항목 목록에 명령을 적용하는 데 도움이 됩니다.
Git Blob 관리에 대한 최종 생각
성능과 스토리지를 최적화하려면 Git 리포지토리에서 대용량 파일을 효과적으로 관리하는 것이 필수적입니다. BFG 및 Git Filter-Repo와 같은 도구를 사용하면 이 프로세스를 간소화하는 데 도움이 되지만 각 도구에는 고유한 명령과 방법이 있습니다. 고급 옵션을 활용하고 각 도구의 미묘한 차이를 이해함으로써 저장소를 깨끗하고 효율적으로 유지할 수 있습니다. 데이터 손실을 방지하려면 중요한 변경을 하기 전에 항상 저장소를 백업하는 것을 잊지 마세요. 이러한 도구에 대한 지식을 전략 계획과 결합하면 버전 관리 방식이 크게 향상됩니다.