Rumah >pembangunan bahagian belakang >Golang >Apabila menggunakan ciri Plainclone go-git, url repo git akan mempunyai /git-upload-pack ditambahkan
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.
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 }
Menjalankan kod ini menambah /git-upload-pack ("https://87673d4bab84f8a5d784bdb9c7504a91/git-upload-pack") pada penghujung url repo, jadi klon gagal dengan kod status 400. Tidak faham mengapa ini dilampirkan.
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!