“ วัตถุที่หลวม” ที่ Git GUI อ้างถึงคืออะไร?


219

เมื่อเปิดGit GUIloose objectsฉันได้รับข้อความป๊อปอัพที่หมายถึง ฉันทำgit gcและลบข้อความ

สิ่งที่เป็นloose objectsและวิธีการที่ฉันสามารถป้องกันการนี้เกิดขึ้นอีกครั้งหรือไม่


คุณสามารถคลิก"ใช่"ในข้อความป๊อปอัพเมื่อถามว่าควรจะบรรจุวัตถุที่หลวมหรือไม่ Git GUIจะทำงานgit gcให้คุณด้วยแถบความคืบหน้าของ GUI ที่ดี (แม้ว่าจะแสดงว่าติดอยู่เกือบตลอดเวลา)
ADTC

คำตอบ:


144

วัตถุ (blobs, ต้นไม้และคอมมิชชัน) ด้วย SHA พูด - 810cae53e0f622d6804f063c04a83dbc3a11b7ca จะถูกเก็บไว้ที่

.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca

(การแยกตัวอักษรสองตัวแรกเพื่อปรับปรุงประสิทธิภาพของระบบไฟล์ในขณะนี้ไม่ใช่วัตถุทั้งหมดจะถูกเก็บไว้ในไดเรกทอรีเดียวกัน)

วัตถุที่เก็บไว้ข้างต้นเรียกว่าวัตถุที่หลวม

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

 git gc

คือสิ่งที่คุณเรียกใช้เพื่อแพ็ควัตถุ (โดยปกติจะเป็นวัตถุที่ไม่จำเป็นและไม่กี่สัปดาห์ก็ถูกลบออกและมี--prune=<date>ตัวเลือกที่คุณสามารถบังคับให้ลบวัตถุที่ไม่ต้องการออกได้อีกต่อไปเช่นเมื่อคุณแก้ไขคอมมิชชัน ต้องการอีกต่อไป.)


3
--pruneตัวเลือกที่ถูกเปิดใช้งานโดยค่าเริ่มต้นและตั้งแต่git gcถูกเรียกโดยอัตโนมัติด้วยการใช้งานทั่วไป (เช่นcommit), คุณมักจะไม่ต้องกังวลเกี่ยวกับเรื่องนี้ ฉันไม่ได้ใช้ git gui และฉันไม่สามารถหาตำแหน่งที่มันถูกทริกเกอร์ในแหล่งที่มา แต่มันจะตรวจสอบของตัวเองหรือเพียงแค่สกัดกั้นทgcริกเกอร์โดยคำสั่งที่เรียกว่า แม้ว่าจะไม่มีอะไรต้องกังวลแน่นอนเกิดจากการใช้งานปกติ
Cascabel

21
มีข้อเสียในการบรรจุวัตถุที่หลวมหรือไม่? ถ้าไม่ทำไม Git ถึงไม่ทำมันโดยอัตโนมัติ
Louis Rhys

13
ฉันไม่คิดว่ามันจะเกิดขึ้นโดยอัตโนมัติ ฉันมักจะกระทำ แต่ 'คอมไพล์กุย' กล่าวมี 50,000 วัตถุหลวม (และได้รับการสงสัยว่าทำไมคอมไพล์ก็ด่าช้าโครงการขนาดใหญ่กว่า ~ 4 ปีโดยไม่มี GC คู่มือ)
เควิน

1
@Kevin ประสิทธิภาพของโครงการขนาดใหญ่ของคุณดีขึ้นหลังจากทำงานgit gcด้วยตนเองหรือไม่? ฉันคิดว่าควรปรับปรุงเนื่องจากวัตถุหลวมไม่มีประสิทธิภาพและ 50,000 เป็นจำนวนมาก ฉันยังพบว่าการจัดเก็บจะช่วยลดพื้นที่ที่.gitโฟลเดอร์ใช้เช่นกัน
ADTC

3
@LouisRhys "เมื่อวัตถุถูกเขียนไปยังดิสก์มันมักจะอยู่ในรูปแบบที่หลวมเนื่องจากรูปแบบนั้นมีราคาถูกกว่าในการเข้าถึงอย่างไรก็ตามในที่สุดคุณจะต้องการประหยัดพื้นที่ด้วยการจัดเก็บวัตถุ" - จาก Git Book ลิงก์ในคำตอบด้านล่าง
chris

39

หนังสือ Git อธิบายได้ค่อนข้างดี: https://git-scm.com/book/en/v2/Git-Internals-Packfiles

วัตถุที่หลวมเป็นรูปแบบที่ง่ายกว่า มันเป็นเพียงข้อมูลที่บีบอัดที่เก็บไว้ในไฟล์เดียวบนดิสก์ วัตถุทุกชิ้นที่เขียนไปยังไฟล์แยกต่างหาก

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