Git에서 얕은 복제: 사용 시기와 방법

CI 및 임시 작업에서 빠른 Git 체크아웃을 위해 얕은 복제를 사용하고, 더 많은 히스토리가 필요할 때 복제를 깊게 하거나 전체 복제로 전환하는 방법을 알아보세요.

Git에서 얕은 복제: 사용 시기와 방법

Git의 얕은 복제는 커밋 히스토리의 일부만 가져옵니다. CI 작업, 배포 단계 또는 빠른 검사 작업이 수년간의 히스토리 없이 현재 코드만 필요할 때 유용합니다.

모든 개발자 워크스테이션에 가장 적합한 기본값은 아닙니다. 얕은 복제는 시간과 디스크 공간을 절약할 수 있지만, 더 많은 커밋을 가져올 때까지 히스토리 기반 명령어를 제한합니다.

얕은 복제란 무엇인가?

표준 복제는 일반적인 브랜치 작업, 히스토리 검사, 오래된 태그 체크아웃, 오프라인 조사에 충분한 히스토리를 가져옵니다. 얕은 복제는 선택한 깊이에서 히스토리를 자릅니다.

예를 들어, --depth 1은 선택한 브랜치의 최신 커밋을 가져옵니다. --depth 50은 더 최근 히스토리를 가져오지만, 전체 조상 히스토리는 아닙니다.

얕은 복제 사용의 이점

주요 이점은 전송 비용 절감입니다:

  • 대규모 저장소의 첫 번째 체크아웃 속도 향상.
  • 단기 빌드 에이전트의 디스크 사용량 감소.
  • 느리거나 제한된 네트워크에서 대역폭 사용량 감소.
  • 초기 복제 시 Git이 처리해야 할 히스토리 양 감소.

현재 커밋을 빌드하고 워크스페이스를 폐기하는 CI 파이프라인에서 얕은 복제는 종종 확실한 이점을 제공합니다.

얕은 복제의 단점과 제한 사항

트레이드오프는 누락된 히스토리입니다:

  • git log는 얕은 경계에서 멈춥니다.
  • git blame은 오래된 변경 사항을 추적하지 못할 수 있습니다.
  • 오래된 태그나 커밋은 가져올 때까지 사용할 수 없습니다.
  • Git이 누락된 병합 베이스를 필요로 하는 경우 리베이스와 병합이 더 어려워질 수 있습니다.
  • 일부 릴리스 또는 감사 워크플로는 전체 히스토리를 기대합니다.

작업에 오래된 회귀 디버깅, 릴리스 준비 또는 변경 사항 백포트가 자주 포함된다면 전체 복제로 시작하세요.

얕은 복제 생성 방법

git clone --depth를 사용하세요:

git clone --depth <숫자> <저장소_URL>

예를 들어, 저장소를 복제하고 최신 10개의 커밋만 가져오려면:

git clone --depth 10 https://github.com/example/large-repo.git

브랜치 최신 커밋만 필요한 빌드 작업의 경우:

git clone --depth 1 https://github.com/example/project.git

특정 브랜치를 복제하려면:

git clone --depth 1 -b develop https://github.com/example/project.git

해당 브랜치의 히스토리만 필요한 경우 --single-branch를 추가할 수도 있습니다:

git clone --depth 1 --single-branch --branch develop https://github.com/example/project.git

얕은 복제 관리

더 많은 히스토리 가져오기 (복제 깊게 하기)

복제 후 더 많은 히스토리가 필요하면 저장소를 깊게 만드세요:

git fetch --deepen=50 origin

이 명령은 현재 얕은 경계 너머로 50개의 커밋을 더 가져옵니다.

원하는 총 깊이를 설정할 수도 있습니다:

git fetch --depth=100 origin

중요한 점: git remote set-depth는 유효한 Git 명령어가 아닙니다. 깊이는 clone 및 fetch 옵션을 통해 제어됩니다.

태그 가져오기

얕은 복제는 모든 태그, 특히 오래된 커밋을 가리키는 태그를 포함하지 않을 수 있습니다. 워크플로에 필요한 경우에만 태그를 가져오세요:

git fetch --tags origin

저장소 전체 복제로 전환

얕은 복제를 전체 복제로 변환하려면 나머지 히스토리를 가져오세요:

git fetch --unshallow origin

이 명령은 원격 저장소에서 남은 히스토리를 다운로드합니다.

얕은 복제에서 푸시

얕은 복제에서 푸시는 새 커밋이 가져온 원격 브랜치 최신 커밋을 기반으로 할 때 작동할 수 있습니다. 그러나 누락된 히스토리로 인해 리베이스, 충돌 해결 및 검토가 더 어려워질 수 있으므로 장기 개발에는 적합하지 않습니다.

히스토리 관련 푸시 또는 병합 문제가 발생하면 계속하기 전에 더 많은 히스토리를 가져오거나 전체 복제로 전환하세요.

얕은 복제 사용 시기

작업이 단기적이고 히스토리가 중요하지 않을 때 사용하세요:

  • CI/CD 체크아웃.
  • 읽기 전용 검사.
  • 임시 재현 환경.
  • 문서 빌드.
  • 느린 네트워크의 대규모 저장소.

얕은 복제를 사용하지 말아야 할 때

다음이 정기적으로 필요할 때는 피하세요:

  • 깊은 git log, git blame 또는 git bisect.
  • 오래된 태그를 사용하는 릴리스 작업.
  • 복잡한 병합 또는 리베이스 작업.
  • 히스토리 전반의 오프라인 디버깅.
  • 전체 복제를 기대하는 기여 워크플로.

실용적인 요점

최신 코드만 필요한 일회성 작업에는 git clone --depth 1을 사용하세요. 명확한 이유가 없는 한 일반 개발에는 전체 복제를 사용하세요.

얕은 복제가 방해가 되기 시작하면 git fetch --deepen=<숫자> origin으로 깊게 만들거나 git fetch --unshallow origin으로 변환하세요. 이는 누락된 히스토리 오류를 하나씩 해결하는 것보다 일반적으로 더 빠르고 안전합니다.