ลดขนาดพื้นที่เก็บข้อมูลคอมไพล์


290

ฉันพยายามมองหาบทช่วยสอนที่ดีเกี่ยวกับการลดขนาด repo แต่ไม่พบใคร ฉันจะลดขนาด repo ของฉันได้อย่างไร ... ประมาณ 10 MB แต่สิ่งที่ Heroku อนุญาตให้มีเพียง 50 MB เท่านั้นและฉันไม่ได้พัฒนาแอพของฉันใกล้เสร็จแล้ว

ฉันได้เพิ่มผู้ต้องสงสัยตามปกติ (บันทึกผู้ขายเอกสาร ฯลฯ ) ไปยัง. gitignore แล้ว แม้ว่าฉันเพิ่งเพิ่ม. gitignore เมื่อเร็ว ๆ นี้

ข้อเสนอแนะใด ๆ


1
ฉันเพิ่งทำและมันทำให้มันลดลงเหลือ 2.2 mb ... ขอบคุณมาก! แม้ว่าจะดูเหมือนว่าจะไม่ลดขนาด repo บน Heroku..hmm
-hil

11
กดใช้ --force มันจะเขียนทับเนื้อหาแม้ว่าจะไม่มีการเปลี่ยนแปลง (ไม่มีข้อผูกมัดใหม่ ๆ )
Marcin Gil

1
@MarcinGil - ด้านล่าง VonC ระบุว่าคุณต้องเข้าถึงเซิร์ฟเวอร์เพื่อล้างเซิร์ฟเวอร์ระยะไกล (ถ้าฉันแยกวิเคราะห์อย่างถูกต้อง)
jww

1
เพียงแค่แสดงความคิดเห็นเพื่อช่วยผู้อ่านคนอื่น ๆ หากพวกเขาไม่รู้ว่าจะเพิ่มอะไรใน.gitignoreนั้นมีบริการที่ดีที่ gitignore.io ที่จะช่วยให้คุณตั้งค่าที่ดี.gitignoreขึ้นอยู่กับสภาพแวดล้อม dev ของคุณ
Blairg23

คำตอบ:


352

git gc --aggressiveเป็นวิธีหนึ่งที่จะบังคับให้ลูกพรุนกระบวนการจะใช้สถานที่ (เพื่อให้แน่ใจว่า: git gc --aggressive --prune=now) คุณมีคำสั่งอื่น ๆเพื่อทำความสะอาด repo ด้วย อย่าลืมว่าบางครั้งgit gcคนเดียวสามารถเพิ่มขนาดของ repo !

สามารถใช้หลังจาก a filter-branchเพื่อทำเครื่องหมายบางไดเร็กทอรีที่จะลบออกจากประวัติ (ด้วยการเพิ่มพื้นที่ว่าง); ดู ที่นี่ แต่นั่นหมายความว่าไม่มีใครดึงจาก repo สาธารณะของคุณ filter-branchสามารถเก็บการอ้างอิงสำรองไว้.git/refs/originalเพื่อให้ไดเรกทอรีสามารถล้างได้เช่นกัน

ในที่สุดก็เป็นที่กล่าวถึงในความคิดเห็นนี้และคำถามนี้ ; ทำความสะอาด reflog สามารถช่วย:

git reflog expire --all --expire=now
git gc --prune=now --aggressive

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


ในสถานการณ์อื่นดูได้ที่stackoverflow.com/questions/1029969/ …
VonC

1
หมายเหตุถึงตนเอง: อย่าลืมสาขาระยะไกล: stackoverflow.com/questions/11255802/…
VonC

1
หมายเหตุถึงตนเอง: อย่าลืมแท็กระยะไกล
saiyancoder

1
นอกเหนือจากการอ้างอิงระยะไกลการอ้างอิงเป็นอีกสิ่งที่อาจทำให้การอ้างอิงที่คุณพยายามลบถูกเก็บไว้ stackoverflow.com/q/27489761/1072626
vossad01

1
@ jww ฉันยืนยันว่านี่เป็นการดำเนินงานในท้องถิ่นเท่านั้น มันไม่มีผลต่อขนาดของ repo ระยะไกล คุณจะต้องเข้าถึงเซิร์ฟเวอร์ repo ระยะไกลโดยตรงเพื่อทำเช่นเดียวกัน
VonC

95

ขอบคุณสำหรับคำตอบของคุณ นี่คือสิ่งที่ฉันทำ:

git gc
git gc --aggressive
git prune

ที่ดูเหมือนจะได้ทำเคล็ดลับ ฉันเริ่มต้นด้วยประมาณ 10.5MB และตอนนี้มันน้อยกว่า 980KBs


9
pruneทำงานโดยเสมอgc( โดยค่าเริ่มต้นเมื่อ 2 สัปดาห์ที่ผ่านมา)
Cas

118
คุณสามารถเรียกใช้ทั้ง 3 ลูกพรุนได้จนถึงตอนนี้ใช้git gc --aggressive --prune=now
rahul286

1
แต่เมื่อฉันลบ repo แล้วโคลนอีกครั้งขนาดยังคงมีขนาดใหญ่ คุณจัดการกับสิ่งนั้นได้อย่างไร
cwtuan

2

ในกรณีของฉันฉันผลักไฟล์ขนาดใหญ่ (> 100Mb) หลายไฟล์แล้วดำเนินการลบต่อ แต่พวกเขายังอยู่ในประวัติศาสตร์ของ repo ของฉันดังนั้นฉันต้องลบมันออกจากมันด้วย

อะไรคือกลอุบาย:

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

จากนั้นคุณต้องผลักดันให้สาขาของคุณ:

git push origin <your_branch_name> --force

bfgเป็นเครื่องมือที่สามารถติดตั้งบน Linux และ macOS โดยใช้การชง:

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