Git ไม่ทิ้งข้อมูลด้วยตนเอง * ทุกเวอร์ชันก่อนหน้าของทุกไฟล์จะพร้อมใช้งานสำหรับการย้อนกลับส่วนต่างการตรวจสอบและอื่น ๆ
ทั้งต้นไม้เทียบกับไฟล์ส่วนบุคคล
สิ่งที่คุณอาจจะพยายามปรับความเข้าใจก็คือแนวคิดในการเข้าถึงไฟล์เก่า ๆ ของแต่ละคนเทียบกับความจริงที่ว่ารูปแบบประวัติของ Git นั้นเน้นไปที่ต้นไม้ทั้งหมด การกำหนดเวอร์ชันแบบทรีต้องใช้งานอีกเล็กน้อยเพื่อดู (ตัวอย่าง) รุ่นfoo.c
ที่มีอยู่สิบช่วงเวลาfoo.c
ที่ผ่านมาเมื่อเทียบกับทั้งสิบต้นแบบต้นไม้ที่เปลี่ยนแปลง:
# 10 foo.c-changes ago
git show $(git rev-list -n 10 --reverse HEAD -- foo.c | head -1):foo.c
# 10 whole-tree-changes ago
git show HEAD~10:foo.c
ประโยชน์ของการวางแนวต้นไม้ส่วนใหญ่ความสามารถในการรับชมเป็นหน่วยของการเปลี่ยนแปลงที่พึ่งพาซึ่งกันและกันที่ทำกับส่วนต่าง ๆ ของต้นไม้ทั้งหมดโดยทั่วไปจะมีความสำคัญมากกว่าการพิมพ์พิเศษ (ซึ่งสามารถบรรเทาด้วยนามแฝงสคริปต์และอื่น ๆ ) ใช้เวลาขุดผ่านความมุ่งมั่นที่ผ่านมา
ประสิทธิภาพการจัดเก็บ
เมื่อวัตถุใหม่ (เช่นไฟล์ที่มีเนื้อหาที่มองไม่เห็นก่อนหน้านี้) เข้าสู่ระบบมันจะถูกเก็บไว้ด้วยการบีบอัดธรรมดา (zlib) เป็น "วัตถุหลวม" เมื่อมีวัตถุหลวมเพียงพอสะสม (ขึ้นอยู่กับgc.auto
ตัวเลือกการกำหนดค่าหรือเมื่อผู้ใช้รันgit gcหรือหนึ่งในคำสั่งการบรรจุระดับต่ำกว่า) Git จะรวบรวมวัตถุหลวมจำนวนมากไว้ใน "แพ็คไฟล์" เดียว
วัตถุในไฟล์แพ็คสามารถจัดเก็บได้ไม่ว่าจะเป็นข้อมูลที่ถูกบีบอัดแบบธรรมดา (เช่นเดียวกับวัตถุที่หลวมเพียงรวมกับวัตถุอื่น ๆ ) หรือบีบอัดเดลต้าต่อวัตถุอื่น ๆ Deltas สามารถถูกโยงเข้าด้วยกันเพื่อกำหนดความลึก ( pack.depth
) และสามารถทำกับวัตถุที่เหมาะสมใด ๆ ( pack.window
ควบคุมวิธีการที่ Git ค้นหาฐานเดลต้าที่ดีที่สุดอย่างกว้างขวาง Git รุ่นของไฟล์ที่ไม่เกี่ยวข้องในอดีตสามารถใช้เป็นฐานได้หากทำเช่นนั้น การบีบอัดเดลต้าที่ดี) ละติจูดที่การกำหนดค่าความลึกและขนาดหน้าต่างให้เอ็นจินการบีบอัดเดลต้ามักส่งผลให้การบีบอัดเดลต้าดีกว่าการบีบอัด“ diff” แบบง่าย ๆ แบบ CVS ในรูปแบบ CVS แบบง่าย ๆ
นี่คือการบีบอัดเดลต้าเชิงรุก (รวมกับการบีบอัด zlib ปกติ) ที่สามารถปล่อยให้ที่เก็บ Git (ที่มีประวัติเต็มและแผนผังการทำงานที่ไม่มีการบีบอัด) ใช้พื้นที่น้อยกว่าการชำระเงิน SVN เดียว (ด้วยต้นไม้ทำงานที่ไม่มีการบีบอัด
ดูที่Git เก็บวัตถุและส่วนPackfileของหนังสือ Git Communityได้อย่างไร นอกจากนี้ยังมีคอมไพล์แพ็ควัตถุ manpage
* คุณสามารถบอกได้ว่า Git ได้ทิ้งการกระทำโดย“ เขียนประวัติศาสตร์ใหม่” และด้วยคำสั่งเช่นการรีเซ็ต gitแต่แม้ในกรณีเหล่านี้ Git“ แฮงค์ลงบน” การกระทำที่ถูกทิ้งร้างใหม่ในขณะที่ในกรณีที่คุณตัดสินใจว่าคุณต้องการ ดูคอมไพล์ reflogและคอมไพล์ลูกพรุน