Git ล้มเหลวเมื่อกดคอมมิตไปที่ github


131

ฉันโคลน repo คอมไพล์ที่ฉันโฮสต์บน github ไปยังแล็ปท็อปของฉัน ฉันสามารถดันสอง commits ไปยัง github ได้สำเร็จโดยไม่มีปัญหา อย่างไรก็ตามตอนนี้ฉันได้รับข้อผิดพลาดต่อไปนี้:

Compressing objects: 100% (792/792), done.
error: RPC failed; result=22, HTTP code = 411
Writing objects: 100% (1148/1148), 18.79 MiB | 13.81 MiB/s, done.
Total 1148 (delta 356), reused 944 (delta 214)

จากที่นี่มันก็แฮงค์และในที่สุดฉันก็ต้องCTRL+ Cกลับไปที่เทอร์มินัล


เหตุใดจึงเกิดข้อผิดพลาด HTTP คุณไม่กดไปที่ github ผ่าน SSH เหรอ?
Cascabel

ชี้แจง: url ในoriginส่วนของ.git/configไม่พูด http ใช่หรือไม่
Cascabel

@Jefromi ฉันโคลน repo ส่วนตัวของฉันโดยใช้ลิงก์ http อ่าน / เขียน
Stephen Melvin

ไม่มันบอกว่า https นี่เป็นเรื่องแปลกเพราะฉันสามารถผลักดันสองครั้งก่อนที่จะล้มเหลว
Stephen Melvin

คำตอบ:


293

ฉันมีปัญหาเดียวกันและเชื่อว่ามันเกี่ยวข้องกับขนาดของ repo (แก้ไข - หรือขนาดของไฟล์เฉพาะ) ที่คุณพยายามผลักดัน

โดยทั่วไปฉันสามารถสร้าง repos ใหม่และส่งไปยัง github แต่สิ่งที่มีอยู่จะใช้ไม่ได้

ดูเหมือนว่ารหัสข้อผิดพลาด HTTP จะสำรองข้อมูลไว้ว่าเป็นข้อผิดพลาด "ต้องระบุความยาว" ดังนั้นบางทีมันอาจจะใหญ่เกินไปที่จะคำนวณหรือ greated สูงสุด ใครจะรู้.

แก้ไข

ฉันพบว่าปัญหาอาจเป็นไฟล์ที่มีขนาดใหญ่ ฉันมีการอัปเดตหนึ่งรายการที่จะไม่ผลักดันแม้ว่าฉันจะประสบความสำเร็จในการผลักดันไปถึงจุดนั้น มีเพียงไฟล์เดียวในการกระทำ แต่เกิดขึ้นเป็น 1.6M

ดังนั้นฉันจึงเพิ่มการเปลี่ยนแปลงการกำหนดค่าต่อไปนี้

git config http.postBuffer 524288000

เพื่อให้ได้ขนาดไฟล์สูงสุด 500M จากนั้นพุชของฉันก็ใช้งานได้ อาจเป็นไปได้ว่านี่เป็นปัญหาในตอนแรกในการผลักดัน repo ขนาดใหญ่ผ่านโปรโตคอล http

สิ้นสุดการแก้ไข

วิธีที่ฉันจะทำให้มันใช้งานได้ (แก้ไขก่อนที่ฉันจะแก้ไข postBuffer) คือการตั้งค่า repo ของฉันคัดลอกไปยังเครื่องที่สามารถทำ git ผ่าน ssh และส่งไปที่ github จากนั้นเมื่อคุณพยายามทำการ push / pull จากเซิร์ฟเวอร์ดั้งเดิมมันควรจะทำงานผ่าน https (เนื่องจากเป็นข้อมูลจำนวนน้อยกว่าการพุชเดิมมาก)

หวังว่านี่จะช่วยได้


ทำงานให้ฉันด้วยแม้ว่าฉันจะมีข้อผิดพลาด HTTP 501 แทนที่จะเป็น 411 ก็ตามขอบคุณ!
Emaad Ahmed Manzoor

ขอบคุณ! วิธีนี้ได้ผลและยังเพิ่มความเร็วในการอัปโหลด พยายามผลักดันเว็บไซต์ไปยังเว็บไซต์ Windows Azure ใหม่ แต่ก็ล้มเหลว
Jake

23
มีข้อเสียในการตั้งค่านี้สูงมากหรือไม่?
snogglethorpe

@snogglethorpe ที่เป็นไปได้: "Transfer-Encoding: chunked ใช้เพื่อหลีกเลี่ยงการสร้างไฟล์แพ็คขนาดใหญ่ในเครื่อง" หากคุณตั้งค่าเป็นสิ่งที่ยิ่งใหญ่คุณสามารถสร้างไฟล์แพ็คขนาดใหญ่ได้เมื่อคุณพยายามผลักดัน ไม่ใช่ทุกระบบไฟล์ที่จัดการไฟล์ขนาดใหญ่ได้ดีและอาจตัดได้ไม่เต็มประสิทธิภาพ คุณสามารถดูไฟล์เหล่านี้ใน. git / objects / pack
ป่าน

เปลี่ยนhttp.postBufferเป็นอื่น ๆที่ไม่จำเป็นกว่าที่เป็นอันตราย แต่มีผลกระทบด้านลบ: การเพิ่มมันข้างต้นเริ่มต้นอาจเพิ่มความล่าช้าสำหรับดันขนาดใหญ่ (ตั้งแต่ลูกค้าจะบัฟเฟอร์ร้องขอ HTTP เป็นชิ้นขนาดใหญ่)
Swatantra Kumar


4

ดูเหมือนปัญหาเซิร์ฟเวอร์ (เช่นปัญหา "GitHub")
หากคุณดูที่เธรดนี้อาจเกิดขึ้นได้เมื่อgit-http-backendได้รับฮีปที่เสียหาย (และเนื่องจากพวกเขาเพิ่งวางการสนับสนุน http อัจฉริยะ ... )
แต่สาเหตุที่แท้จริงคืออะไรก็ตามมันอาจเกี่ยวข้องกับการหยุดชะงักเป็นระยะ ๆ ใน หนึ่งใน fileserver

คุณยังคงเห็นข้อความแสดงข้อผิดพลาดนี้หรือไม่ เพราะถ้าคุณทำ:

  • ตรวจสอบเวอร์ชัน Git ในเครื่องของคุณ (และอัปเกรดเป็นเวอร์ชันล่าสุด)
  • รายงานนี้เป็นข้อผิดพลาด GitHub

หมายเหตุ: การสนับสนุน Smart HTTPเป็นเรื่องใหญ่สำหรับพวกเราที่อยู่เบื้องหลังพร็อกซีไฟร์วอลล์ระดับองค์กรที่ได้รับการรับรองความถูกต้อง!

จากนี้ไปหากคุณโคลนที่เก็บบนhttp://url และคุณใช้ไคลเอนต์ Git เวอร์ชัน 1.6.6 ขึ้นไป Git จะใช้กลไกการขนส่งที่ใหม่กว่าและดีกว่าโดยอัตโนมัติ
อย่างไรก็ตามที่น่าอัศจรรย์ยิ่งกว่านั้นคือตอนนี้คุณสามารถผลักดันโปรโตคอลนั้นและโคลนที่เก็บส่วนตัวได้เช่นกัน หากคุณเข้าถึงที่เก็บส่วนตัวหรือคุณเป็นผู้ทำงานร่วมกันและต้องการการเข้าถึงแบบพุชคุณสามารถใส่ชื่อผู้ใช้ของคุณใน URL และ Git จะแจ้งให้คุณป้อนรหัสผ่านเมื่อคุณพยายามเข้าถึง

ลูกค้าที่มีอายุมากกว่าก็จะถอยกลับไปใช้วิธีที่เก่ากว่าและมีประสิทธิภาพน้อยกว่าดังนั้นจึงไม่มีอะไรควรทำลาย - ลูกค้าใหม่ควรทำงานได้ดีกว่า

ดังนั้นอย่าลืมอัปเกรดไคลเอนต์ Git ของคุณก่อน


ฉันพบปัญหาที่คล้ายกันหลังเราเตอร์ไร้สาย ADSL (French Orange Livebox): เป็นไปไม่ได้ที่จะเผยแพร่คีย์ SSH ของฉันที่github.comกดค้างที่ https ... จนกว่าฉันจะใช้การเข้าถึงอินเทอร์เน็ตอื่น
Yves Martin

การสนับสนุน Smart HTTP ได้รับการจัดการเพื่อให้ฉันผ่านพร็อกซีไฟร์วอลล์ของเราเมื่อฉันได้รับ "ข้อผิดพลาด: RPC ล้มเหลวผลลัพธ์ = 22 รหัส HTTP = 0" เมื่อฉันพยายามพุช
Boggin

@Boggin ใช่ฉันยืนยันว่าโดยทั่วไปแล้วสมาร์ท http เป็นตัวเลือกที่ต้องการเมื่อหนึ่งอยู่หลังพร็อกซี พอร์ต http / https มาตรฐาน (เกือบ) เปิดตลอดเวลา
VonC


0

ฉันพยายามส่งไปยังเซิร์ฟเวอร์ bonobo-git ที่โฮสต์ของฉันเองและไม่ทราบว่า http.postbuffer หมายถึงไดเร็กทอรีโครงการ ...

ดังนั้นสำหรับคนที่สับสนอื่น ๆ :

ทำไม? ในกรณีของฉันฉันมีไฟล์ zip ขนาดใหญ่ที่มีเนื้อหาและ PSD บางตัวก็ดันไปด้วยเช่นกัน - ใหญ่สำหรับบัฟเฟอร์ที่ฉันเดา

วิธีทำ http.postbuffer นี้: เรียกใช้คำสั่งนั้นภายในไดเร็กทอรี src ของโปรเจ็กต์ของคุณถัดจากโฟลเดอร์. git ไม่ใช่บนเซิร์ฟเวอร์

โปรดทราบว่าไฟล์ temp (ก้อน) ขนาดใหญ่จะถูกสร้างขึ้นจากขนาดบัฟเฟอร์นั้น

หมายเหตุ: เพียงตรวจสอบไฟล์ที่ใหญ่ที่สุดของคุณจากนั้นตั้งค่าบัฟเฟอร์


-2

ปัญหาในการพุชส่วนใหญ่เป็นเพราะขนาดของไฟล์ที่ต้องผลักดัน ฉันพยายามผลักดันไลบรารีบางส่วนที่มีขนาดเพียง 2 mb จากนั้นการพุชก็ให้ข้อผิดพลาดของ RPC ด้วยผลลัพธ์ที่ 7 บรรทัดมีความเร็ว 4 mbps และใช้งานได้ดี ความพยายามบางอย่างที่ตามมาในการผลักดันทำให้ฉันประสบความสำเร็จ หากเกิดข้อผิดพลาดดังกล่าวให้รอสักครู่แล้วพยายามต่อไป

ฉันยังพบว่ามีความล้มเหลวของ RPC บางอย่างหาก github หยุดทำงานหรือมีเครือข่ายที่ไม่เสถียรที่ด้านข้าง

ดังนั้นการพยายามทำต่อไปเรื่อย ๆ เป็นทางเลือกเดียว!


-2

ในกรณีเหล่านี้คุณสามารถลอง ssh ได้หาก https ค้าง

นอกจากนี้คุณสามารถลองเพิ่มขนาดบัฟเฟอร์เป็นตัวเลขทางดาราศาสตร์เพื่อที่คุณจะได้ไม่ต้องกังวลเกี่ยวกับขนาดบัฟเฟอร์อีกต่อไป git config http.postBuffer 100000000

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