Git ค้างขณะเขียนวัตถุ


105

ฉันกำลังพยายามgit push -u origin masterและมันก็ค้างที่

Writing objects:  99% (219/220), 12.65 MiB | 97 KiB/s

12.65ส่วนกะรอบ เมื่อฉันออกจากกระบวนการและเรียกใช้อีกครั้งจะดำเนินการต่อที่ 99% แต่ไม่เสร็จสิ้นเช่นเดิม

มันไม่เคยผลักดันสำเร็จ นี่คือการคอมมิตเริ่มต้น


คุณต้องการผลักดันไปที่ใด คุณใช้ SSH หรือโปรโตคอลอื่น ๆ หรือไม่?
Paŭlo Ebermann

27
จะตั้งค่าความhttp.postbufferช่วยเหลือหรือไม่? stackoverflow.com/questions/6842687/…
VonC

3
ความคิดเห็นของ VonC นั้นง่ายเกินไปที่จะมองข้าม มันใช้ได้กับฉัน
Thuan

1
เหลือเชื่อ. นั่นก็เพื่อฉันเช่นกัน และตอนนี้ก็คือปี 2018 และเป็น SSH ไม่ใช่ HTTP และ repo ทั้งหมดก็เหมือน 15MB และเซิร์ฟเวอร์ "ระยะไกล" คือ localhost หยุดโรแมนติก Git คนโปรด! ;)
Sz.

คำตอบ:


225

ฉันทำตามคำแนะนำของ VonC:

git config --global http.postBuffer 524288000

สำหรับการอ้างอิงในอนาคตตามความคิดเห็น:

500 MB: 524288000 (as posted in the original answer)
1 GB: 1048576000
2 GB: 2097152000 (anything higher is rejected as 'out of range')

4
ขอบคุณสำหรับสิ่งนี้! กำลังดึงผมออกและสิ่งนี้ช่วยแก้ปัญหาของฉันได้!
Brett Thomas

3
@HugoForte การเพิ่มบัฟเฟอร์ดูเหมือนจะช่วยแก้ปัญหาการเขียนไฟล์ที่ค้างอยู่ แต่การกดคอมไพล์ของฉันไม่เคยเสร็จสมบูรณ์ (หยุดทำงานหลังจากนั้นWriting objects: 100%) - ก่อนหน้านี้มันค้างที่ 25% ดังนั้นสิ่งนี้จึงช่วยได้อย่างชัดเจน อย่างไรก็ตามฉันยังคงมีพฤติกรรม "แปลก ๆ " อยู่ ฉันเริ่มระบบของฉันใหม่และดูเหมือนว่าจะแก้ไขสิ่งต่าง ๆ ได้ ... FYI ... หากใครยังคงประสบปัญหาหลังจากเพิ่มบัฟเฟอร์การรีสตาร์ทระบบของฉันช่วยได้ในสถานการณ์ของฉัน (โซลูชันโรงเรียนเก่าไม่มีน้อยกว่า แต่การรีสตาร์ทใหม่ช่วยได้มาก)
twknab

4
ใครช่วยอธิบายว่าตัวเลข524288000มาจากไหน?
Ryre

7
@Ryre เป็น 500 MB
Hugo Forte

1
ขอพระเจ้าอวยพรคุณและ Stackoverflow ฉันจะเป็นผู้แพ้อย่างสมบูรณ์โดยไม่ต้อง
decoder7283

37

สิ่งนี้เกิดขึ้นเนื่องจากไฟล์ขนาดใหญ่ที่ไม่มีเครื่องหมายในไดเรกทอรี repo อ๊ะ.

แก้ไข

แฮงค์เป็นเพราะไฟล์ใช้เวลาอัปโหลดนาน ไม่ควรรวมไฟล์ไว้ในการพุช

แก้ไข

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


@TimoSolo ทำไมฉันถึงทำอย่างนั้น? ฉันเป็นคนหนึ่งที่มีปัญหาและฉันได้บันทึกการแก้ไขที่แน่นอน ค่อนข้างตรงไปตรงมา
mattalxndr

4
ใช่การแก้ไขของคุณคือการลบปัญหา เพื่อประโยชน์ของผู้อื่นที่ต้องการผลักดันไฟล์ขนาดใหญ่คำตอบของ @ hugo-forte ช่วยแก้ปัญหาได้ คุณไม่จำเป็นต้องทำฉันแค่คิดว่ามันจะช่วยคนได้มากขึ้น - ด้วยจิตวิญญาณของ SO
TimoSolo

2
คำถามไม่ใช่ "ฉันจะคอมมิตแล้วดันไฟล์ขนาดใหญ่ได้อย่างไร" มันคือ "My git push is neverending ทำไม?" หากคุณไม่คาดหวังว่าการผลักดันจะดำเนินไปตลอดกาลคุณอาจ (เช่นฉัน) ไม่ได้ตั้งใจที่จะส่งไฟล์ขนาดใหญ่ขนาดนั้น
mattalxndr

3
@mattalxndr เมื่อคำตอบที่ยอมรับมี 1/8 คะแนนคุณควรเปลี่ยนคำตอบ
NorCalKnockOut

1
@mattalxndr ไม่มีคำตอบที่สมบูรณ์แบบ คนหนึ่งระบุสาเหตุและอีกคนเสนอวิธีแก้ปัญหา คำตอบที่ดีที่สุดจะระบุสาเหตุอธิบายว่าเหตุใดจึงได้ผลลัพธ์และเสนอทางเลือกสองทาง IMO จากตัวเลือกปัจจุบันคำตอบของ Hugo Forte นั้นเหนือกว่าเพราะจะแก้ปัญหาได้ไม่ว่าคุณจะตั้งใจที่จะผลักดันไฟล์หรือไม่ก็ตาม ไม่เพิกเฉยต่อผู้คนที่ทำผิดพลาดเช่นเดียวกับคุณ มันแก้ไขปัญหาให้พวกเขาได้เท่าเทียมกับคนอื่น ๆ แต่ปล่อยให้พวกเขาลบไฟล์ถ้าพวกเขาไม่ได้ตั้งใจที่จะผลักดันมัน
BZ1

7

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

เช่น. สมมติว่าที่เก็บปัจจุบันคือ A จากนั้นสิ่งที่คุณต้องทำคือ:

  1. mv A B
  2. git clone A
  3. mv B/* A/
  4. rm -rf B

จากนั้นกระทำและผลักดันและทุกอย่างก็ใช้ได้ดี มันรับรู้ว่าไฟล์ที่ย้ายถูกแก้ไข :)


คุณพบอาการอื่น ของฉันไม่มีข้อผิดพลาดร้ายแรงใด ๆ
mattalxndr

5

ในกรณีของฉันฉันใช้โฟลเดอร์ git ที่มีสิทธิ์ไม่ดีที่เก็บไว้ในไดรฟ์เดียวกันกับ repo แต่อาจเหมือนกันกับ ssh แม้ว่าคุณจะใช้ผู้ใช้ล็อกอินที่ได้รับอนุญาตก็ตาม

ตรวจสอบว่าคุณมีสิทธิ์ที่ถูกต้องในการเขียนบน repo ที่อยู่ห่างไกลหรือไม่

ตัวอย่าง:

เริ่มต้น repo ในพื้นที่และห่างไกล

git init /tmp/src
git init --bare /tmp/dst
cd /tmp/src

การเพิ่ม repo ระยะไกลไปยังต้นทาง

src > git remote add dest /tmp/dst

การจำลองปัญหา

src > chmod -R 555 /tmp/dst

การเพิ่มไฟล์ปลอมและผลักดัน

src > touch a && git add a && git commit -m 'demo'
src > git push --set-upstream dest master
src > git push
Counting objects: 3, done.
Writing objects: 99% (2/3), 202 bytes | 0 bytes/s.

Git แฮงค์

วิธีการแก้

src > chmod -R 775 /tmp/dst

2
โปรดพิจารณาเพิ่มรายละเอียดที่เป็นแบบอย่างเพิ่มเติมในคำตอบของคุณขอบคุณ
Mirza Sisic

1
ขออภัย. จะดีกว่าไหม?
Naewis

3

ในสถานการณ์ของฉันมันคือขนาดของไฟล์ การเพิ่มไฟล์. gitignore ด้วยนามสกุลที่ต้องการทำให้ฉันสามารถเพิกเฉยต่อไฟล์ที่ไม่ต้องการส่วนใหญ่ที่จะถูกพุชได้


2

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


1

git clean -f -nแก้ปัญหาของฉัน มีไฟล์ที่ไม่ได้ติดตามจำนวนมากที่ตรวจไม่พบ แต่ระวังเพราะจะลบไฟล์ในไดเรกทอรีของคุณ


3
ไฟล์ใดที่จะลบออกโดยเฉพาะ
Jazimov

1

ในกรณีของฉันฉันพยายามผลักดันโดยไม่ปฏิบัติตามกฎของ บริษัท ฉันได้เรียนรู้ในภายหลังว่าเราควรเริ่มข้อความคอมมิตด้วย "MOBIL-XXXX" โดยที่ XXXX คือหมายเลขที่นักพัฒนาซอฟต์แวร์ได้รับมอบหมายใน Jira (เครื่องมืออื่นที่เราใช้เพื่อติดตามกระบวนการพัฒนา) โดยผู้วิเคราะห์

ตรวจสอบให้แน่ใจว่า บริษัท ของคุณมีกฎบังคับที่คล้ายกันหรือไม่


0

ฉันมีปัญหาเดียวกันในเครื่อง Windows 10 ไฟล์ writing objectsแต่ในสถานการณ์ที่แตกต่างกันเล็กน้อย

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

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

attrib -r +s D:\foldername 

แก้ไขปัญหาให้ฉัน

แค่โพสต์ไว้ที่นี่อาจมีบางคนมีปัญหาเดียวกันกับของฉัน

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