Wenn Sie die Plainclone-Funktion von go-git verwenden, wird an die Git-Repo-URL /git-upload-pack angehängt

WBOY
Freigeben: 2024-02-12 08:06:08
nach vorne
425 Leute haben es durchsucht

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

Der PHP-Editor Baicao hat eingeführt, dass bei Verwendung der Plainclone-Funktion von go-git bei Angabe der Git-Repo-URL automatisch /git-upload-pack angehängt wird. Dies liegt daran, dass git-upload-pack der Befehl ist, der vom Git-Protokoll zum Klonen und Abrufen von Remote-Repositorys verwendet wird. Mit dieser Funktion können Sie Remote-Repositorys einfach klonen und abrufen, ohne /git-upload-pack manuell hinzufügen zu müssen. Auf diese Weise können Sie mit go-git Git-Vorgänge bequemer ausführen und die Arbeitseffizienz verbessern.

Frageninhalt

Versuch, ein Repository von Azure Devops zu klonen.

func (gitopt *GitOptions) clone() (*git.Repository, error) {
    r, err := git.PlainClone(gitopt.RepoDir, false, &git.CloneOptions{
        Progress: os.Stdout,
        URL:      "https://<path to repo>",
        Auth: &http.BasicAuth{
            Username: "gituser",
            Password: gitopt.PAT,
        },
    })
    if err != nil {
        log.Info(err.Error())
        return nil, err
    }

    return r, nil
}
Nach dem Login kopieren

Beim Ausführen dieses Codes wird /git-upload-pack („https:///git-upload-pack“) am Ende der Repo-URL hinzugefügt, sodass der Klon mit dem Statuscode 400 fehlschlägt. Ich kann nicht verstehen, warum dies angehängt wird.

Workaround

Das HTTP-basierte Git-Protokoll besteht aus zwei Schritten, abhängig von der verwendeten Protokollversion. In v0 und v1 lautet die erste Anfrage /info/refs 并读取正在使用的引用,然后第二个请求是 /git-upload-pack (用于获取和克隆)或 /git-receive- pack (für Push). In Version 2 sind die Endpunkte dieselben, aber der erste ist die Funktionsanforderung und dann die Referenzanforderung und die Datenübertragung zum zweiten Endpunkt.

In all diesen Fällen ist die von Ihnen angegebene URL lediglich die Grundlage für das Anhängen des Pfads. Verschiedene Pfade erleichtern die Steuerung des Zugriffs auf einen einfachen Git-Server hinter etwas wie Nginx oder Apache, weshalb es nicht nur eine einzelne URL-Komponente gibt.

Die generierte URL ist also tatsächlich korrekt. Der Grund, warum Sie eine 400 sehen, liegt darin, dass ein Problem vorliegt Azure DevOps erfordert, dass der Client multi_ack Funktionen unterstützt, die go-git nicht unterstützt. Obwohl Server technisch gesehen keine Unterstützung für Clients bereitstellen müssen, die sie nicht möchten, ist das Git-Smart-HTTP-Protokoll im Allgemeinen so konzipiert, dass es sich langsam verschlechtern kann. Es ist daher nicht sicher, dass Clients unbedingt einen bestimmten Satz unterstützen. Funktionalität, und Azure DevOps sollte diese Annahme vermeiden.

Verknüpfte Probleme haben einen Link zu einer Pull-Anfrage, die das Problem in einigen (aber nicht allen) Fällen behebt. Möglicherweise müssen Sie jedoch auf eine höhere Version aktualisieren, um davon profitieren zu können.

Das obige ist der detaillierte Inhalt vonWenn Sie die Plainclone-Funktion von go-git verwenden, wird an die Git-Repo-URL /git-upload-pack angehängt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!