> 개발 도구 > 자식 > 본문

이 기술을 사용하면 git clone 속도를 수십 배 향상시킬 수 있습니다!

藏色散人
풀어 주다: 2021-12-20 17:59:26
앞으로
3185명이 탐색했습니다.

git clone이 매우 느리거나 심지어 실패하는 비교적 큰 프로젝트를 접한 적이 있는지 모르겠습니다. 다들 어떻게 대처할 것인가?

다른 다운로드 소스로 변경하는 것을 고려할 수도 있고, 인터넷 속도를 높이기 위해 어떤 수단을 사용할 수도 있지만, 이 모든 방법을 시도해 보았지만 여전히 느리다면 어떻게 될까요?

오늘 이 문제가 발생했습니다. gitlab에서 typescript 코드를 다운로드해야 했는데 속도가 매우 느렸습니다.

git clone https://github.com/microsoft/TypeScript ts
로그인 후 복사

오랜 시간을 기다린 후에도 다운로드가 완료되지 않아 매개변수

git clone https://github.com/microsoft/TypeScript --depth=1 ts
로그인 후 복사
를 추가했습니다.

이로 인해 속도가 수십 배 향상되었으며 즉시 다운로드되었습니다.

--length를 추가하면 커밋 하나만 다운로드되므로 콘텐츠는 훨씬 줄어들고 속도는 빨라집니다. [관련 권장 사항: Git 사용 튜토리얼]

그리고 다운로드한 콘텐츠는 계속해서 새로운 커밋을 제출하고 새로운 브랜치를 생성할 수 있습니다. 후속 개발에는 영향을 미치지 않지만 기록 커밋 및 기록 분기로 전환할 수는 없습니다.

내 프로젝트 중 하나로 테스트했습니다. 먼저 커밋을 다운로드했습니다:

이 기술을 사용하면 git clone 속도를 수십 배 향상시킬 수 있습니다!

그 후 몇 가지 변경 사항을 적용하면 git add, commit 및 push가 정상적으로 제출될 수 있습니다. 새 지점 만들기도 정상적으로 제출할 수 있습니다. 유일한 단점은 기록 커밋과 기록 분기로 전환할 수 없다는 것입니다.

일부 시나리오에서는 매우 유용합니다. 기록 브랜치로 전환해야 할 때 필요한 커밋 수를 계산한 다음 깊이를 지정하면 속도도 향상될 수 있습니다. 이 기술을 사용하면 git clone 속도를 수십 배 향상시킬 수 있습니다!

이것이 왜 작동하는지 생각해 본 적이 있나요?

이 기술을 사용하면 git clone 속도를 수십 배 향상시킬 수 있습니다!Git 원리

Git은 일부 객체를 사용하여 정보를 저장합니다.

glob 객체는 파일 콘텐츠를 저장하고

tree 객체는 파일 경로를 저장하고

commit 객체는 커밋 정보를 저장하고 관련 트리

    는 커밋을 항목으로 사용합니다. 관련된 모든 트리와 blob은 이 커밋의 내용입니다.
  • 커밋은 서로 관련되어 있으며 헤드, 브랜치, 태그 등은 특정 커밋에 대한 포인터입니다. .git/refs에서 볼 수 있습니다. 이런 방식으로 브랜치, 태그 등의 개념이 커밋을 기반으로 구현됩니다.
Git은 이 세 가지 객체를 통해 버전 관리 및 분기 전환 기능을 구현합니다. 모든 객체는 .git/objects에서 볼 수 있습니다.

git이 작동하는 방식은 다음과 같습니다.

이 기술을 사용하면 git clone 속도를 수십 배 향상시킬 수 있습니다! 주로 Blob, Tree, Commit의 세 가지 객체와 Head, Tag, Branch, Remote 등의 Ref를 이해합니다.

단일 커밋을 다운로드할 수 있는 원리

git은 특정 커밋을 진입점으로 모든 개체를 연결한다는 것을 알고 있으므로 히스토리가 필요하지 않으면 자연스럽게 하나의 커밋만 다운로드할 수 있습니다.

이러한 방식으로 해당 커밋을 기반으로 새 커밋이 생성되고 새 블롭, 트리 등이 연결됩니다. 그러나 기록 커밋, 트리 및 Blob은 다운로드되지 않았으므로 다시 전환할 수 없으며 해당 태그, 분기 및 기타 포인터도 마찬가지입니다. 이것이 단일 커밋을 다운로드하는 방법이지만 여전히 새로운 브랜치, 커밋 등을 생성할 수 있습니다.

요약

대규모 Git 프로젝트를 접할 때 --length 매개변수를 추가하면 속도를 크게 향상시킬 수 있습니다. 기록 커밋이 많을수록 다운로드 속도 향상이 커집니다.

이 기술을 사용하면 git clone 속도를 수십 배 향상시킬 수 있습니다!그리고 다운로드한 프로젝트는 후속 개발을 위해 계속 개발할 수 있으며 새 커밋, 새 브랜치 및 태그를 생성할 수 있지만 기록 커밋, 브랜치 및 태그로 전환할 수는 없습니다.

git의 원칙을 정리했습니다. 트리, 블롭, 커밋 세 가지 객체를 통해 파일과 제출 정보가 저장되고, 커밋 간의 연관을 통해 브랜치, 태그 등의 기능이 구현됩니다. 커밋은 모든 트리 및 blob과 연결된 진입점입니다.

커밋을 다운로드할 때 관련 트리, 블롭 및 일부 참조(태그, 브랜치 등 포함)를 모두 다운로드합니다. 이것이 --깊이의 원칙입니다.

이 기술을 사용하여 기록 커밋 및 분기로 전환하지 않고도 대규모 프로젝트의 git 복제 속도를 향상시킬 수 있기를 바랍니다.

위 내용은 이 기술을 사용하면 git clone 속도를 수십 배 향상시킬 수 있습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:juejin.im
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿