Apabila menggunakan ciri Plainclone go-git, url repo git akan mempunyai /git-upload-pack ditambahkan

WBOY
Lepaskan: 2024-02-12 08:06:08
ke hadapan
461 orang telah melayarinya

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

Editor PHP Baicao memperkenalkan bahawa apabila menggunakan fungsi Plainclone go-git, apabila anda menyediakan url repo git, /git-upload-pack akan dilampirkan secara automatik. Ini kerana git-upload-pack ialah arahan yang digunakan oleh protokol git untuk mengklon dan menarik repositori jauh. Dengan ciri ini, anda boleh mengklon dan menarik repositori jauh dengan mudah tanpa menambah /git-upload-pack secara manual. Dengan cara ini, anda boleh menggunakan go-git untuk melaksanakan operasi git dengan lebih mudah dan meningkatkan kecekapan kerja.

Kandungan soalan

Cuba mengklon repositori daripada Azure Devops.

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
}
Salin selepas log masuk

Menjalankan kod ini menambah /git-upload-pack ("https:///git-upload-pack") pada penghujung url repo, jadi klon gagal dengan kod status 400. Tidak faham mengapa ini dilampirkan.

Penyelesaian

Protokol Git berasaskan HTTP terdiri daripada dua langkah, bergantung pada versi protokol yang digunakan. Dalam v0 dan v1, permintaan pertama ialah /info/refs 并读取正在使用的引用,然后第二个请求是 /git-upload-pack (用于获取和克隆)或 /git-receive- pack (untuk tolak). Dalam v2, titik akhir adalah sama, tetapi yang pertama ialah permintaan ciri, dan kemudian permintaan rujukan dan pemindahan data ke titik akhir kedua.

Dalam semua kes ini, URL yang anda berikan hanyalah asas untuk menambahkan laluan. Laluan yang berbeza memudahkan untuk mengawal akses kepada pelayan Git ringkas di belakang sesuatu seperti nginx atau Apache, itulah sebabnya tidak terdapat hanya satu komponen URL.

Jadi URL yang dijana sebenarnya betul. Sebab anda melihat 400 adalah kerana terdapat masalah Azure DevOps memerlukan pelanggan untuk menyokong fungsi multi_ack, yang tidak disokong oleh go-git. Walaupun secara teknikal pelayan tidak perlu memberikan sokongan untuk mana-mana pelanggan yang mereka tidak mahu, protokol HTTP Pintar Git secara amnya direka bentuk untuk merendahkan dengan anggun, jadi ia bukanlah andaian yang selamat bahawa pelanggan semestinya menyokong mana-mana set tertentu. fungsi, dan Azure DevOps harus mengelak daripada membuat andaian ini.

Isu terpaut mempunyai pautan ke permintaan tarik yang membetulkan isu dalam beberapa (tetapi bukan semua) kes. Walau bagaimanapun, anda mungkin perlu mengemas kini kepada versi yang lebih tinggi untuk memanfaatkan ini.

Atas ialah kandungan terperinci Apabila menggunakan ciri Plainclone go-git, url repo git akan mempunyai /git-upload-pack ditambahkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan