• bundle-uri는 Git의 새 기능으로, 캐시된 파일을 다운로드해 프로젝트 데이터를 미리 채운 후 서버와의 복잡한 페치 과정을 줄임
  • 일반적으로 git clone 명령어는 서버와 협상 과정을 거쳐 필요한 데이터를 다운로드함 → 비효율적일 수 있음
  • bundle-uri는 CDN에서 캐시된 초기 데이터를 받아오고, 이후 서버에서 최신 상태만 업데이트하도록 함 → 시간 단축 가능

클론 속도가 빨라지는가?

Yes? - 빠를 수 있다

  • 로컬 파일 옵션을 사용하면 클론 속도가 매우 빨라짐
  • VM에서 마운트된 파일 시스템이나 클라우드 캐시에서 번들 파일을 사용하면 더 빠르게 동기화 가능

No? - 더 느릴 수 있다

  • 동일한 데이터를 CDN에서 받아오면 빠를 것 같았으나, 오히려 더 느렸음
  • 실험 결과: 번들을 사용한 클론이 일반 클론보다 더 느림
    • 일반 클론: 2분 36초
    • 번들 사용 클론: 3분 20초
  • 번들에서 이미 받은 객체가 다시 다운로드되는 문제가 발생함

Maybe? - 그럴 수도 있다

  • Git이 번들 파일에서 refs/heads (브랜치 참조)만 읽어서 문제가 발생
  • 나머지 참조는 무시되기 때문에 서버에서 추가로 데이터를 다운로드하게 됨
  • Git 코드를 수정해 모든 참조를 복사하도록 하면 클론 속도가 개선됨
    • 수정 후 클론 시간: 2분 19초 (기존 2분 36초보다 빨라짐)
    • 추가로 다운로드한 객체 수: 43,877개 (전체의 약 1%)

수정 방법 및 패치 적용

  • Git의 bundle-uri.c 코드에서 refs/heads 외의 참조를 무시하는 부분을 수정
  • 수정 후 모든 참조를 복사하도록 변경 → 클론 속도 개선
  • 이 수정은 6글자 변경으로 이루어진 최소한의 패치였음

이 기능을 사용해야 할까?

possibly - 아마 도움 될수도

  • GitHub, GitLab 같은 플랫폼에서는 서버 CPU 부담을 줄일 수 있는 큰 장점이 있음
    • 서버에서 직접 packfile을 계산하지 않고 CDN에서 처리 가능 → 서버 자원 절약
  • 개인 사용자도 유용할 수 있는 경우:
    • 사내 Git 서버에서 대규모 클론을 반복해야 하는 경우
    • CI/CD 시스템에서 반복적인 전체 클론 작업이 필요한 경우

현실적으로 강제될 가능성이 높음

  • 최신 Git 프로토콜에서는 서버가 클라이언트에 번들 URL을 제공 가능
  • 서버가 번들 파일 URL을 제공하면 클라이언트가 자동으로 다운로드 후 동기화 진행
  • GitHub 등에서 이 기능이 활성화되면 사용자가 선택할 여지가 없음

결론

  • 번들 파일을 사용하면 클론 속도가 더 빠를 수 있지만, Git의 처리 방식 때문에 초기에는 오히려 느려질 수 있음
  • Git의 코드를 수정해 참조 처리 방식을 개선하면 클론 속도가 향상됨
  • 앞으로 GitHub, GitLab 등에서 이 기능을 도입하면 클라이언트에서 자동으로 사용하게 될 가능성이 큼