대형 리포지토리로 작업
Git은 널리 채택되고 권장되는 훌륭한 버전 제어 시스템이지만 대규모 리포지토리로 작업할 때 몇 가지 사항을 고려하고 신경 써야 합니다.
분산 버전 제어 시스템에서 리포지토리의 로컬 복사본을 사용할 수 있지만 대형 리포지토리가 있는 경우 심각한 문제가 발생할 수 있습니다.
예를 들어 Microsoft는 300GB 이상의 데이터를 포함하는 리포지토리를 내부 시스템에서 Git으로 마이그레이션할 때 이 문제를 발견했습니다.
리포지토리가 커지는 이유
대형 리포지토리의 경우 두 가지 주요 원인은 다음과 같습니다.
- 긴 기록
- 대형 이진 파일
부분 복제
개발자에게 로컬 리포지토리의 사용 가능한 모든 기록이 필요한 것은 아니라면 부분 복제를 구현하는 것이 좋습니다.
로컬 개발 시스템의 공간과 동기화하는 데 걸리는 시간이 모두 절약됩니다.
실행하려는 복제의 수준을 지정할 수 있습니다.
git clone --depth [depth] [clone-url]
분기를 필터링하거나 단일 분기만 복제하여 복제본 크기를 줄일 수도 있습니다.
Git용 VFS
Git용 VFS는 대규모 리포지토리에 유용합니다. Git LFS 클라이언트가 필요합니다.
일반적인 Git 명령은 영향을 받지 않지만 Git LFS는 표준 파일 시스템에서 작동하여 서버의 파일이 필요할 때 백그라운드에서 필요한 파일을 다운로드합니다.
Git LFS 클라이언트는 오픈 소스로 릴리스되었습니다. 프로토콜은 REST 엔드포인트와 유사한 4개의 엔드포인트가 있는 간단한 프로토콜입니다.
대규모 리포지토리에 대한 자세한 내용은 대용량 파일 작업 및 Git용 가상 파일 시스템: 엔터프라이즈 규모에서 Git 사용을 참조하세요.
스칼라
스칼라는 Windows 및 macOS에서 사용할 수 있는 .NET Core 애플리케이션입니다. Git용 도구 및 확장을 사용하면 매우 큰 리포지토리가 Git 명령 성능을 최대화할 수 있습니다. Microsoft는 Windows 및 Office 리포지토리에 이를 사용합니다.
Azure Repos가 리포지토리를 호스트하는 경우 GVFS 프로토콜을 사용하여 리포지토리를 복제할 수 있습니다.
다음과 같은 몇 가지 고급 Git 기능을 사용하도록 설정하면 됩니다.
- 부분 복제: 모든 Git 개체를 즉시 다운로드하지 않음으로써 작업 리포지토리를 가져오는 시간을 줄입니다.
- 백그라운드 프리페치: 매시간 모든 원격에서 Git 개체 데이터를 다운로드하여 포그라운드 git 페치 호출 시간을 줄입니다.
- 스파스 체크 아웃: 작업 디렉터리의 크기를 제한합니다.
- 파일 시스템 모니터: 최근에 수정된 파일을 추적하고 Git에서 전체 작업 트리를 검색할 필요성을 없앱니다.
- 커밋 그래프: 커밋 워크 및 연결성 계산을 가속화하여 git 로그와 같은 명령을 가속화합니다.
- 다중 팩 인덱스: 여러 팩 파일에서 빠른 개체 조회를 지원합니다.
- 증분 다시 압축: 다중 팩 인덱스를 사용하여 동시 명령을 중단하지 않고 압축된 Git 데이터를 더 적은 수의 팩 파일로 다시 압축합니다.
참고
Scalar가 새 Git 버전이 릴리스될 때 자동으로 구성하는 기능 목록을 업데이트합니다.
자세한 내용은 다음을 참조하세요.
- microsoft/scalar: 스칼라
- Introducing Scalar: Git at scale for everyone(스칼라 소개: 모든 사용자를 위한 대규모 Git)