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 add, commit 및 push가 정상적으로 제출될 수 있습니다. 새 지점 만들기도 정상적으로 제출할 수 있습니다. 유일한 단점은 기록 커밋과 기록 분기로 전환할 수 없다는 것입니다.
일부 시나리오에서는 매우 유용합니다. 기록 브랜치로 전환해야 할 때 필요한 커밋 수를 계산한 다음 깊이를 지정하면 속도도 향상될 수 있습니다.
이것이 왜 작동하는지 생각해 본 적이 있나요?Git 원리
Git은 일부 객체를 사용하여 정보를 저장합니다.
glob 객체는 파일 콘텐츠를 저장하고 tree 객체는 파일 경로를 저장하고 commit 객체는 커밋 정보를 저장하고 관련 트리주로 Blob, Tree, Commit의 세 가지 객체와 Head, Tag, Branch, Remote 등의 Ref를 이해합니다.
단일 커밋을 다운로드할 수 있는 원리
git은 특정 커밋을 진입점으로 모든 개체를 연결한다는 것을 알고 있으므로 히스토리가 필요하지 않으면 자연스럽게 하나의 커밋만 다운로드할 수 있습니다.
이러한 방식으로 해당 커밋을 기반으로 새 커밋이 생성되고 새 블롭, 트리 등이 연결됩니다. 그러나 기록 커밋, 트리 및 Blob은 다운로드되지 않았으므로 다시 전환할 수 없으며 해당 태그, 분기 및 기타 포인터도 마찬가지입니다. 이것이 단일 커밋을 다운로드하는 방법이지만 여전히 새로운 브랜치, 커밋 등을 생성할 수 있습니다. 요약대규모 Git 프로젝트를 접할 때 --length 매개변수를 추가하면 속도를 크게 향상시킬 수 있습니다. 기록 커밋이 많을수록 다운로드 속도 향상이 커집니다.그리고 다운로드한 프로젝트는 후속 개발을 위해 계속 개발할 수 있으며 새 커밋, 새 브랜치 및 태그를 생성할 수 있지만 기록 커밋, 브랜치 및 태그로 전환할 수는 없습니다.
git의 원칙을 정리했습니다. 트리, 블롭, 커밋 세 가지 객체를 통해 파일과 제출 정보가 저장되고, 커밋 간의 연관을 통해 브랜치, 태그 등의 기능이 구현됩니다. 커밋은 모든 트리 및 blob과 연결된 진입점입니다.
이 기술을 사용하여 기록 커밋 및 분기로 전환하지 않고도 대규모 프로젝트의 git 복제 속도를 향상시킬 수 있기를 바랍니다.
위 내용은 이 기술을 사용하면 git clone 속도를 수십 배 향상시킬 수 있습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!