ดูเหมือนว่าโครงการของฉันเริ่มใหญ่ขึ้นcommit/pushเรื่อยๆ ทุกคอมไพล์ มีวิธีการล้างโฟลเดอร์ git ของฉันหรือไม่?
ดูเหมือนว่าโครงการของฉันเริ่มใหญ่ขึ้นcommit/pushเรื่อยๆ ทุกคอมไพล์ มีวิธีการล้างโฟลเดอร์ git ของฉันหรือไม่?
คำตอบ:
ฉันไม่แน่ใจว่าคุณต้องการอะไร แน่นอนก่อนอื่นทุกครั้งที่คุณคอมมิชชัน / ผลักดันไดเร็กตอรี่จะใหญ่ขึ้นเล็กน้อยเนื่องจากมันจะต้องเก็บคอมมิทเพิ่มเติมแต่ละอันไว้
อย่างไรก็ตามคุณอาจต้องการgit gcที่จะ "ล้างไฟล์ที่ไม่จำเป็นและเพิ่มประสิทธิภาพพื้นที่เก็บข้อมูลท้องถิ่น" ( หน้าคู่มือ )
อีกคำสั่งที่เกี่ยวข้องอาจเป็นgit cleanซึ่งจะลบไฟล์ที่ไม่ได้ติดตามจากต้นไม้ของคุณ ( หน้าคู่มือ )
WARNINGคำสั่งตามที่เขียนไว้ข้างต้นโดย @Kalle จะลบทุก> ที่ไม่ได้ติดตาม <ไฟล์และไดเรกทอรีภายในของคุณ GIT ROOT , ไม่เพียงแค่ "ไฟล์ที่ระบุไว้ใน .gitignore" สิ่งใดก็ตามที่ไม่ได้รับการติดตามโดย Git ไม่ว่าจะมีการระบุไว้หรือไม่ก็ตาม.gitignoreจะถูกลบทิ้ง git clean -dfX(หมายเหตุกรณีในX) จะลบรายการที่มีกฎที่เกี่ยวข้อง.gitignoreเท่านั้น โปรดฟังคำเตือนนี้ ไม่เคยเรียกใช้git cleanโดยไม่ต้องทำงานทั้งในโหมดโต้ตอบกับ-iแทน-fหรืออย่างน้อยการทำแห้งครั้งแรก - และจากนั้นอีกครั้งกับ-n -f
วิ่ง:
git remote prune origin
ลบสาขาการติดตามเก่าทั้งหมดที่ถูกลบไปแล้วoriginแต่ยังคงมีให้บริการในremotes/originเครื่อง
git gc --auto
' G arbage C ollection' - เรียกใช้งานการดูแลทำความสะอาด (บีบอัดการแก้ไขลบวัตถุที่หลวม / ไม่สามารถเข้าถึงได้) การ--autoตั้งค่าสถานะก่อนกำหนดว่างานใด ๆ ที่จำเป็นและออกโดยไม่ต้องทำอะไรถ้าไม่
สถานการณ์หนึ่งที่ repo git ของคุณจะมีขนาดใหญ่ขึ้นอย่างจริงจังในแต่ละการกระทำคือสถานการณ์ที่คุณคอมมิทไฟล์ไบนารีที่คุณสร้างเป็นประจำ การจัดเก็บข้อมูลของพวกเขาจะไม่เป็นที่มีประสิทธิภาพกว่าไฟล์ข้อความ
อีกอันหนึ่งคือไฟล์ที่คุณมีไฟล์จำนวนมากภายในหนึ่ง repo (ซึ่งเป็นขีด จำกัด ของคอมไพล์ ) แทนที่จะเป็น subrepos จำนวนมาก ( จัดการเป็น submodules )
ในบทความเกี่ยวกับพื้นที่คอมไพล์ AlBlue กล่าวถึง:
โปรดทราบว่า Git (และ Hg และ DVCS อื่น ๆ ) ประสบปัญหาที่มีการตรวจสอบไบนารี (ใหญ่) แล้วลบเนื่องจากจะยังปรากฏในที่เก็บและใช้พื้นที่แม้ว่าจะไม่เป็นปัจจุบัน .
หากคุณมีไบนารีขนาดใหญ่เก็บไว้ใน repo git ของคุณคุณอาจพิจารณา:
git filter-branch (คำเตือน: สิ่งนี้จะเขียนประวัติใหม่ซึ่งไม่ดีถ้าคุณผลัก repo ของคุณไปแล้วและถ้ามีคนอื่นดึงออกมาจากมัน)ดังที่ฉันกล่าวถึงใน " ข้อ จำกัด ของไฟล์ใน Git (จำนวนและขนาด) คืออะไร " ยิ่งล่าสุด (2015 5 ปีหลังจากคำตอบนี้) Git LFSจาก GitHub เป็นวิธีที่จะจัดการกับไฟล์ขนาดใหญ่เหล่านั้น (โดยการจัดเก็บพวกเขานอกที่เก็บ Git)
ใช่git gcเป็นทางออกโดยธรรมชาติ
และในเครื่อง - คุณสามารถลบที่เก็บในเครื่องแล้วโคลนอีกครั้ง
วินาทีที่คุณรอให้คอมไพล์ขนาดใหญ่ & ภายนอกประมวลผลถูกรวบรวมเป็นเวลานานซึ่งจะถูกรวบรวมเป็นชั่วโมงที่ไม่มีเวลาใช้งาน
สร้างพื้นที่เก็บข้อมูลใหม่(ทั้งหมดไม่ใช่แค่สาขา)ตั้งแต่เริ่มต้นรวมถึงไฟล์รุ่นล่าสุดเท่านั้นโดยปกติคุณจะสูญเสียประวัติทั้งหมด
แต่เมื่ออยู่ใน code-world มันไม่ใช่เวลาที่จะมีอารมณ์อ่อนไหวไม่มีจุดลากตลอดทั้ง 5 ปีของรหัสทุกการกระทำหรือ diff คุณยังสามารถเก็บ git & externals เก่าที่ไหนสักแห่งถ้าคุณคิดถึง:]
แต่ในบางจุดคุณต้องย้ายไป:]
ทีมของคุณจะขอบคุณ!
การเรียกใช้คำสั่งนี้เป็นอันตรายอย่างยิ่ง แต่จะทำให้พื้นที่เก็บข้อมูลของคุณลดลงด้วยการลบไฟล์กู้คืน / สำรองข้อมูล git ทั้งหมด:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
มันจะลบไฟล์ทั้งหมดที่ git ใช้ในการกู้คืนพื้นที่เก็บข้อมูลของคุณจากคำสั่งที่ไม่ดีบางอย่างเช่นถ้าคุณทำgit reset --hardคุณมักจะสามารถกู้คืนไฟล์ที่หายไป แต่ถ้าคุณทำgit reset --hardก่อนgit reflog expire...คำสั่งคุณก็สูญเสียทุกอย่าง ตอนนี้ความหวังเดียวของคุณคือการใช้เครื่องมือบางอย่างที่วิเคราะห์ระบบไฟล์ของคุณและพยายามกู้คืนไฟล์ที่ถูกลบหากไม่ได้ถูกแทนที่
git clean -d -f -i เป็นวิธีที่ดีที่สุดที่จะทำ
ซึ่งจะช่วยในการทำความสะอาดในลักษณะที่ควบคุมได้มากขึ้น
-i ย่อมาจากการโต้ตอบ
git cleanไม่ใช่เพื่อล้าง repo มากเท่ากับการล้างไดเรกทอรี สำหรับผู้ใช้ที่คัดลอก / วางสุ่มสี่สุ่มห้าระวัง; สิ่งนี้จะลบไฟล์ / dirs ที่ไม่ได้ติดตามคุณอาจต้องการภายในเครื่อง
ไม่ทราบว่ามันจะย่อขนาดหรือไม่ แต่หลังจากฉันรันgit cleanฉันมักจะทำgit repack -adเช่นนั้นซึ่งจะลดจำนวนไฟล์แพ็ค
git gcกระบวนการดังนั้นไม่จำเป็นต้องเรียกใช้แยกต่างหาก