>  기사  >  백엔드 개발  >  go-git의 Plainclone 기능을 사용하면 git repo URL에 /git-upload-pack이 추가됩니다.

go-git의 Plainclone 기능을 사용하면 git repo URL에 /git-upload-pack이 추가됩니다.

WBOY
WBOY앞으로
2024-02-12 08:06:08461검색

使用 go-git 的 Plainclone 功能时,git repo url 会附加 /git-upload-pack

PHP 편집자 Baicao는 go-git의 Plainclone 기능을 사용할 때 git repo url을 제공하면 /git-upload-pack이 자동으로 추가된다고 소개했습니다. 이는 git-upload-pack이 원격 저장소를 복제하고 가져오기 위해 git 프로토콜에서 사용하는 명령이기 때문입니다. 이 기능을 사용하면 /git-upload-pack을 수동으로 추가하지 않고도 원격 저장소를 쉽게 복제하고 가져올 수 있습니다. 이런 식으로 go-git을 사용하면 git 작업을 보다 편리하게 수행하고 작업 효율성을 높일 수 있습니다.

질문 내용

Azure Devops에서 리포지토리를 복제하려고 합니다.

으아아아

이 코드를 실행하면 repo URL 끝에 /git-upload-pack("https:///git-upload-pack")이 추가되므로 상태 코드 400과 함께 복제가 실패합니다. 이게 왜 첨부되는지 이해가 안가네요.

해결 방법

HTTP 기반 Git 프로토콜은 사용된 프로토콜 버전에 따라 두 단계로 구성됩니다. v0 및 v1에서 첫 번째 요청은 /info/refs 并读取正在使用的引用,然后第二个请求是 /git-upload-pack (用于获取和克隆)或 /git-receive- pack(푸시용)입니다. v2에서는 엔드포인트가 동일하지만 첫 번째 엔드포인트는 기능 요청이고 그 다음에는 참조 요청과 데이터가 두 번째 엔드포인트로 전송됩니다.

이 모든 경우에 제공하는 URL은 경로를 추가하기 위한 기초일 뿐입니다. 다양한 경로를 사용하면 nginx 또는 Apache와 같은 뒤에 있는 간단한 Git 서버에 대한 액세스를 더 쉽게 제어할 수 있습니다. 이것이 바로 단일 URL 구성 요소가 아닌 이유입니다.

생성된 URL은 실제로 정확합니다. 400이 표시되는 이유는 문제가 있습니다 Azure DevOps에서는 클라이언트가 go-git에서 지원하지 않는 multi_ack 기능을 지원해야 하기 때문입니다. 기술적으로 서버는 원하지 않는 클라이언트에 대한 지원을 제공할 필요가 없지만 Git Smart HTTP 프로토콜은 일반적으로 성능이 정상적으로 저하되도록 설계되었으므로 클라이언트가 반드시 특정 세트를 지원한다고 안전한 가정은 아닙니다. 기능을 갖추고 있으며 Azure DevOps는 이러한 가정을 피해야 합니다.

링크된 문제에는 일부(전부는 아님) 문제를 해결하는 풀 요청에 대한 링크가 있습니다. 그러나 이 기능을 활용하려면 더 높은 버전으로 업데이트해야 할 수도 있습니다.

위 내용은 go-git의 Plainclone 기능을 사용하면 git repo URL에 /git-upload-pack이 추가됩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제