ข้อผิดพลาด: RPC ล้มเหลว curl transfer ปิดโดยมีข้อมูลการอ่านค้างอยู่


130

ฉันพบข้อผิดพลาดนี้เมื่อฉันพยายามโคลนที่เก็บจาก GitLab (GitLab 6.6.2 4ef8369):

ใส่คำอธิบายภาพที่นี่

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

จากนั้นโคลนจะถูกยกเลิก ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร?

คำตอบ:


223

มันเกิดขึ้นบ่อยกว่าไม่ฉันใช้การเชื่อมต่ออินเทอร์เน็ตที่ช้าและฉันต้องโคลนที่เก็บ git ขนาดใหญ่พอสมควร ปัญหาที่พบบ่อยที่สุดคือการเชื่อมต่อปิดลงและการโคลนทั้งหมดถูกยกเลิก

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

หลังจากการทดลองและข้อผิดพลาดมากมายและ“ รีโมทเอนด์ค้างโดยไม่คาดคิด” มากมายฉันมีวิธีที่เหมาะกับฉัน แนวคิดคือต้องทำการโคลนตื้นก่อนจากนั้นจึงอัปเดตที่เก็บด้วยประวัติ

$ git clone http://github.com/large-repository --depth 1
$ cd large-repository
$ git fetch --unshallow

10
นี่เป็นคำตอบเดียวที่อธิบายวิธีแก้ปัญหาสำหรับปัญหาโดยไม่ต้องเปลี่ยนไปใช้ SSH สิ่งนี้ได้ผลสำหรับฉันขอบคุณ!
garie

14
สำคัญนี่คือและ--depth 1 --unshallowนอกจากนี้ยังทำงานสำหรับการเรียก repo ที่มีอยู่ในการเชื่อมต่อช้า: แล้วgit fetch --depth 1 git fetch --unshallow
Andrew T.

1
เพื่อความชัดเจน @AndrewT. git fetch --unshallowคำสั่งเกี่ยวข้องกับการสูญเสียการเชื่อมต่อในลักษณะที่ให้อภัยได้มากกว่าgit clone? และนั่นคือสิ่งที่สร้างความแตกต่างที่นี่?
Lowell

2
ตอนนี้git fetch --unshallowคำสั่งให้RPC failed;ข้อผิดพลาด
ms_27

1
ไม่ได้ผลสำหรับฉัน ล้มเหลวในไฟล์git fetch --unshallow. เดาว่า repo ของฉันใหญ่เกินไปสำหรับแนวทางนี้ SSH เท่านั้นที่ทำงานได้
Jonathan Cabrera

60

หลังจากไม่กี่วันวันนี้ฉันเพิ่งแก้ไขปัญหานี้ สร้างคีย์ ssh ตามบทความนี้:

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

ประกาศให้

  1. ผู้ให้บริการ Git (GitLab ที่ฉันใช้ GitHub)
  2. เพิ่มสิ่งนี้เป็นเอกลักษณ์ของท้องถิ่น

จากนั้นโคลนตามคำสั่ง:

git clone username@mydomain.com:my_group/my_repository.git

และไม่มีข้อผิดพลาดเกิดขึ้น

ปัญหาข้างต้น

ข้อผิดพลาด: RPC ล้มเหลว curl 18 โอนปิดโดยมีข้อมูลการอ่านค้างอยู่

เนื่องจากมีข้อผิดพลาดเมื่อโคลนโดยโปรโตคอล HTTP ( curlคำสั่ง)

และคุณควรเพิ่มขนาดบัฟเฟอร์:

git config --global http.postBuffer 524288000

7
เปลี่ยนจาก HTTP เป็น SSH สำหรับฉัน Config http.postBufferไม่ทำงาน
thangdc94

หากยังมีข้อผิดพลาดอยู่คุณควรแก้ไขไฟล์กำหนดค่า ssh vi /users/username/.ssh/config และเพิ่ม serverAliveInterval 120 และออกจาก vi โดยใช้ wq (เพื่อบันทึกและออก) สิ่งนี้จะป้องกันไม่ให้เซิร์ฟเวอร์หมดเวลาและข้อผิดพลาดในการเชื่อมต่อ
Tanvir Singh

เป็นเรื่องดี แต่มีใครรู้บ้างว่าทำไมถึงเกิดขึ้นกับการโคลน 100%?
workplaylifecycle

การเปลี่ยนhttp.postBufferได้ผลสำหรับฉัน - ขอบคุณ!
Negar Zamiri

ขอบคุณมันได้ผลสำหรับฉันวิธีนี้ควรได้รับการโหวตมากขึ้น :)
Sadmi

17

เมื่อฉันลองโคลนนิ่งจากรีโมทได้รับปัญหาเดิมซ้ำ ๆ :

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

ในที่สุดสิ่งนี้ก็ใช้ได้ผลสำหรับฉัน:

git clone https://username@bitbucket.org/repositoryName.git --depth 1

3
What --depth 1 does
Wahdat Kashmiri

ทำงานได้ดีสำหรับฉัน
vijay junupalli

หากที่เก็บซอร์สเสร็จสมบูรณ์ให้แปลงที่เก็บแบบตื้นเป็นที่เก็บแบบสมบูรณ์โดยลบข้อ จำกัด ทั้งหมดที่กำหนดโดยที่เก็บแบบตื้น ถ้าที่เก็บซอร์สตื้นให้ดึงข้อมูลให้มากที่สุดเพื่อให้ที่เก็บปัจจุบันมีประวัติเหมือนกับที่เก็บซอร์ส
RahmanRezaee

6

คุณต้องปิดการบีบอัด:

git config --global core.compression 0

จากนั้นคุณต้องใช้โคลนตื้น

git clone --depth=1 <url>

ขั้นตอนที่สำคัญที่สุดคือการลงซีดีในโครงการโคลนของคุณ

cd <shallow cloned project dir>

ตอนนี้ยกเลิกการโคลนทีละขั้นตอน

git fetch --depth=N, with increasing N

เช่น.

git fetch --depth=4

แล้ว

git fetch --depth=100

แล้ว

git fetch --depth=500

คุณสามารถเลือกจำนวนก้าวที่คุณต้องการโดยแทนที่ N นี้

และสุดท้ายดาวน์โหลดการแก้ไขที่เหลือทั้งหมดโดยใช้

git fetch --unshallow 

โหวตว่ามันช่วยคุณได้ไหม :)


5

วิธีแก้ปัญหาอย่างง่าย: แทนที่จะทำการโคลนผ่าน https ให้โคลนผ่าน ssh

ตัวอย่างเช่น:

git clone https://github.com/vaibhavjain2/xxx.git - Avoid
git clone git@github.com:vaibhavjain2/xxx.git - Correct

ใช่. ฉันเป็นผู้ใช้ windows
Vaibhav Jain

5

ปัญหาการเชื่อมต่อเครือข่าย
อาจเกิดจากการหมดเวลาการเชื่อมต่ออย่างต่อเนื่อง
วิธีที่ดีที่สุดคือเปลี่ยนไปใช้เครือข่ายอื่น


5

ขั้นตอนเหล่านี้ใช้ได้ผลสำหรับฉัน: ใช้git://แทนhttps://


3
ยินดีต้อนรับสู่ Stack Overflow โปรดพยายามให้คำตอบที่ละเอียดขึ้นเพื่อให้ทุกคนที่ต้องการลองใช้วิธีแก้ปัญหาของคุณสามารถทำได้อย่างง่ายดาย
McMutton

จริงๆแล้วคำตอบนี้มีความเฉพาะเจาะจงมากกว่าคำตอบถัดไปในชุดข้อความนี้ ..
xxxvodnikxxx

4

ดังที่ได้กล่าวไว้ข้างต้นก่อนอื่นให้รันคำสั่ง git ของคุณจาก bash โดยเพิ่มคำสั่งบันทึกขั้นสูงในตอนเริ่มต้น: GIT_TRACE=1 GIT_CURL_VERBOSE=1 git ...

เช่นGIT_CURL_VERBOSE=1 GIT_TRACE=1 git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin จะแสดงข้อมูลข้อผิดพลาดโดยละเอียด


2

กับฉันปัญหานี้เกิดขึ้นเนื่องจากการกำหนดค่าพร็อกซี ฉันเพิ่มเซิร์ฟเวอร์ ip git ในข้อยกเว้นพร็อกซี เซิร์ฟเวอร์ git เป็นโลคัล แต่ตัวแปรสภาพแวดล้อม no_proxy ไม่ได้ตั้งค่าอย่างถูกต้อง

ฉันใช้คำสั่งนี้เพื่อระบุปัญหา:

#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

ในทางกลับกันมี "Proxy-Authorization" เนื่องจากเซิร์ฟเวอร์ git เป็นจุดที่ไม่ควรผ่านพร็อกซี แต่ปัญหาที่แท้จริงคือขนาดของไฟล์ที่กำหนดโดยกฎของพร็อกซี


2

สำหรับฉันปัญหาคือการเชื่อมต่อปิดก่อนที่การโคลนทั้งหมดจะเสร็จสมบูรณ์ ฉันใช้อีเธอร์เน็ตแทนการเชื่อมต่อ wifi แล้วมันจะแก้ปัญหาสำหรับฉัน


1

ลองคำตอบทั้งหมดที่นี่ ฉันพยายามเพิ่ม cocoapods ลงในเครื่องของฉัน

ฉันไม่มีคีย์ SSH ขอบคุณ @Do Nhu Vy

https://stackoverflow.com/a/38703069/2481602

และใช้ในที่สุด

git clone https://git.coding.net/CocoaPods/Specs.git ~/.cocoapods/repos/master

ในที่สุดเพื่อแก้ไขปัญหาที่พบhttps://stackoverflow.com/a/50959034/2481602


1

ข้อผิดพลาดนี้ดูเหมือนจะเกิดขึ้นบ่อยกว่าเมื่อเชื่อมต่ออินเทอร์เน็ตช้าหรือมีปัญหา ฉันเชื่อมต่อด้วยความเร็วอินเทอร์เน็ตที่ดีแล้วมันก็ทำงานได้อย่างสมบูรณ์


1

ปัญหานี้มาถึงเมื่อคุณมีปัญหาเกี่ยวกับพร็อกซีหรือเครือข่ายช้า คุณสามารถใช้โซลูชันเชิงลึกหรือ

git fetch --all  or git clone 

    

หากสิ่งนี้ทำให้เกิดข้อผิดพลาดของความล้มเหลวของcurl 56 Recv ให้ดาวน์โหลดไฟล์ผ่าน zip หรือ spicify ชื่อของ branch แทน--all

git fetch origin BranchName 

-1

เปลี่ยนโปรโตคอล git clone เพื่อลอง

ตัวอย่างเช่นข้อผิดพลาดนี้เกิดขึ้นเมื่อ "git clone https: // xxxxxxxxxxxxxxx "

ลองใช้ "git clone git: // xxxxxxxxxxxxxx" ก็ได้


-6

ขั้นตอนเหล่านี้ใช้ได้ผลสำหรับฉัน:

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

ฉันหวังว่ามันจะเหมาะกับคุณเช่นกัน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.