error: RPC gagal; curl transfer ditutup dengan sisa data baca yang tersisa

130

Saya menghadapi kesalahan ini ketika saya mencoba mengkloning repositori dari GitLab (GitLab 6.6.2 4ef8369):

masukkan deskripsi gambar di sini

remote: Counting objects: 66352, done.
remote: Compressing objects: 100% (10417/10417), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Klon tersebut kemudian dibatalkan. Bagaimana saya bisa menghindari ini?

Do Nhu Vy
sumber

Jawaban:

223

Ini terjadi lebih sering daripada tidak, saya menggunakan koneksi internet yang lambat dan saya harus mengkloning repositori git yang lumayan besar. Masalah yang paling umum adalah koneksi ditutup dan seluruh klon dibatalkan.

Cloning into 'large-repository'...
remote: Counting objects: 20248, done.
remote: Compressing objects: 100% (10204/10204), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining 
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Setelah banyak trial and error dan banyak "remote end tiba-tiba terputus", saya memiliki cara yang sesuai untuk saya. Idenya adalah melakukan klon dangkal terlebih dahulu dan kemudian memperbarui repositori dengan riwayatnya.

$ git clone http://github.com/large-repository --depth 1
$ cd large-repository
$ git fetch --unshallow
Khader MA
sumber
10
Ini adalah satu-satunya jawaban yang menjelaskan solusi untuk masalah tanpa beralih ke SSH. Ini berhasil untuk saya, terima kasih!
garie
14
Kuncinya di sini adalah --depth 1dan --unshallow. Ini juga berfungsi untuk mengambil repo yang ada pada koneksi lambat: git fetch --depth 1lalu git fetch --unshallow.
Andrew T.
1
Untuk kejelasan @AndrewT., git fetch --unshallowPerintah tersebut menangani hilangnya koneksi dengan cara yang lebih memaafkan daripada git clone? Dan itulah yang membuat perbedaan di sini?
Lowell
2
Sekarang, git fetch --unshallowperintah memberikan RPC failed;kesalahan
ms_27
1
Tidak berhasil untuk saya. Gagal di git fetch --unshallow. Kira repo saya terlalu besar bahkan untuk pendekatan ini. Hanya SSH yang bekerja.
Jonathan Cabrera
60

Setelah beberapa hari, hari ini saya baru saja menyelesaikan masalah ini. Hasilkan kunci ssh, ikuti artikel ini:

https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/

Deklarasikan ke

  1. Penyedia Git (GitLab apa yang saya gunakan, GitHub).
  2. Tambahkan ini ke identitas lokal.

Kemudian klon dengan perintah:

git clone [email protected]:my_group/my_repository.git

Dan tidak ada kesalahan yang terjadi.

Masalah di atas

error: RPC gagal; curl 18 transfer ditutup dengan sisa data baca yang tersisa

karena mengalami error saat di clone dengan protokol HTTP (curl command).

Dan, Anda harus menambah ukuran buffer:

git config --global http.postBuffer 524288000
Do Nhu Vy
sumber
7
Ubah dari HTTP ke SSH cocok untuk saya. Config http.postBuffertidak berhasil.
thangdc94
jika kesalahan masih ada, Anda harus mengedit file konfigurasi ssh vi /users/username/.ssh/config dan menambahkan serverAliveInterval 120 dan keluar dari vi menggunakan wq (untuk menyimpan dan keluar). Ini sebenarnya akan mencegah server dari waktu tunggu dan kesalahan putus koneksi.
Tanvir Singh
itu bagus, tetapi ada yang tahu mengapa hal itu terjadi untuk 100% kloning?
workplaylifecycle
Perubahan http.postBufferberhasil untuk saya - terima kasih!
Negar Zamiri
Terima kasih, ini berhasil untuk saya, solusi ini seharusnya lebih memilih :)
Sadmi
17

Saat saya mencoba mengkloning dari jarak jauh, mengalami masalah yang sama berulang kali:

remote: Counting objects: 182, done.
remote: Compressing objects: 100% (149/149), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Akhirnya ini berhasil untuk saya:

git clone https://[email protected]/repositoryName.git --depth 1
Purushottam Padhya
sumber
3
apa --dalam 1
Wahdat Kashmiri
Bekerja dengan baik untuk saya.
vijay junupalli
Jika repositori sumber selesai, konversikan repositori dangkal menjadi lengkap, hapus semua batasan yang diberlakukan oleh repositori dangkal. Jika repositori sumber dangkal, ambil sebanyak mungkin sehingga repositori saat ini memiliki riwayat yang sama dengan repositori sumber.
RahmanRezaee
6

Anda perlu mematikan kompresi:

git config --global core.compression 0

maka Anda perlu menggunakan klon dangkal

git clone --depth=1 <url>

maka langkah terpenting adalah melakukan cd ke proyek kloning Anda

cd <shallow cloned project dir>

sekarang buka klonnya, selangkah demi selangkah

git fetch --depth=N, with increasing N

misalnya.

git fetch --depth=4

kemudian,

git fetch --depth=100

kemudian,

git fetch --depth=500

Anda dapat memilih berapa banyak langkah yang Anda inginkan dengan mengganti N ini,

dan terakhir unduh semua revisi yang tersisa menggunakan,

git fetch --unshallow 

beri suara positif jika itu membantu Anda :)

NikhilP
sumber
5

Solusi Sederhana: Daripada mengkloning melalui https, kloning melalui ssh.

Sebagai contoh:

git clone https://github.com/vaibhavjain2/xxx.git - Avoid
git clone [email protected]:vaibhavjain2/xxx.git - Correct
Vaibhav Jain
sumber
Iya. Saya pengguna windows.
Vaibhav Jain
5

Masalah koneksi jaringan.
Mungkin karena waktu tunggu koneksi habis.
Cara terbaik adalah dengan beralih ke jaringan lain.

Yang
sumber
5

Langkah-langkah ini berhasil untuk saya: menggunakan, git://bukanhttps://

Jinwawa
sumber
3
Selamat datang di Stack Overflow. Harap coba berikan jawaban yang sedikit lebih detail sehingga siapa pun yang ingin mencoba solusi Anda dapat melakukannya dengan mudah.
McMutton
sebenarnya, jawaban ini lebih spesifik daripada yang berikutnya di utas ini ..
xxxvodnikxxx
4

Seperti yang disebutkan di atas, pertama-tama jalankan perintah git Anda dari bash dengan menambahkan arahan log yang ditingkatkan di awal: GIT_TRACE=1 GIT_CURL_VERBOSE=1 git ...

misalnya GIT_CURL_VERBOSE=1 GIT_TRACE=1 git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin Ini akan menunjukkan informasi kesalahan rinci.

Sergey Gindin
sumber
2

Dengan saya masalah ini terjadi karena konfigurasi proxy. Saya menambahkan server ip git dalam pengecualian proxy. Server git bersifat lokal, tetapi variabel lingkungan no_proxy tidak disetel dengan benar.

Saya menggunakan perintah ini untuk mengidentifikasi masalah:

#Linux:
export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1

#Windows
set GIT_TRACE_PACKET=1
set GIT_TRACE=1
set GIT_CURL_VERBOSE=1

Sebagai imbalannya ada "Proxy-Authorization" sebagai git server yang seharusnya tidak melalui proxy. Tapi masalah sebenarnya adalah ukuran file yang ditentukan oleh aturan proxy

Francisco Eduardo
sumber
2

Bagi saya, masalahnya adalah koneksi ditutup sebelum seluruh klon selesai. Saya menggunakan ethernet, bukan koneksi wifi. Kemudian itu menyelesaikannya untuk saya

Yuresh Karunanayake
sumber
1

Kesalahan ini tampaknya lebih sering terjadi dengan koneksi internet yang lambat atau bermasalah. Saya telah terhubung dengan kecepatan internet yang bagus, lalu berfungsi dengan sempurna.

Jitendra Rathor
sumber
1

Masalah ini muncul ketika Anda masalah proxy atau jaringan lambat. Anda dapat menggunakan solusi kedalaman atau

git fetch --all  or git clone 

    

Jika ini memberikan kesalahan curl 56 Recv failure kemudian unduh file melalui zip atau sebutkan nama cabangnya alih-alih --semua

git fetch origin BranchName 
Gajender Singh
sumber
-1

Mengubah protokol git clone untuk dicoba.

misalnya, kesalahan ini terjadi ketika "git clone https: // xxxxxxxxxxxxxxx "

Anda dapat mencoba dengan "git clone git: // xxxxxxxxxxxxxx", mungkin oke.

Bingnan
sumber
-6

Langkah-langkah ini berhasil untuk saya:

cd [dir]
git init
git clone [your Repository Url]

Saya harap itu berhasil juga untuk Anda.

wen jiang
sumber