Git รวมไว้สำหรับการส่งสำเนาไฟล์ทั้งหมดยกเว้นว่าสำหรับเนื้อหาที่มีอยู่แล้วใน repo Git สแน็ปช็อตจะชี้ไปที่เนื้อหาดังกล่าวแทนที่จะทำซ้ำ
นั่นหมายความว่าไฟล์หลาย ๆ ไฟล์ที่มีเนื้อหาเดียวกันจะถูกจัดเก็บเพียงครั้งเดียว
ดังนั้นสแนปชอตจึงเป็นคอมมิทคอมอ้างถึงเนื้อหาของโครงสร้างไดเรกทอรี
อ้างอิงที่ดีคือ:
คุณบอก Git ว่าคุณต้องการบันทึกสแนปชอตของโครงการของคุณด้วยคำสั่ง Git และมันจะบันทึกรายการไฟล์ทั้งหมดในโปรเจ็กต์ของคุณว่าเป็นอย่างไร
แล็บ 12แสดงวิธีรับสแนปชอตก่อนหน้า
หนังสือ progitมีคำอธิบายที่ครอบคลุมมากขึ้นของภาพ:
ความแตกต่างที่สำคัญระหว่าง Git และ VCS อื่น ๆ (รวมถึงการโค่นล้มและเพื่อน) คือวิธีที่ Git คิดเกี่ยวกับข้อมูล
ตามแนวคิดแล้วระบบอื่น ๆ ส่วนใหญ่จะจัดเก็บข้อมูลเป็นรายการของการเปลี่ยนแปลงตามไฟล์ ระบบเหล่านี้ (CVS, การโค่นล้ม, Perforce, Bazaar และอื่น ๆ ) คิดว่าข้อมูลที่พวกเขาเก็บไว้เป็นชุดของไฟล์และการเปลี่ยนแปลงที่เกิดขึ้นกับแต่ละไฟล์ในช่วงเวลาหนึ่ง

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

นี่คือความแตกต่างที่สำคัญระหว่าง Git และ VCS อื่น ๆ เกือบทั้งหมด มันทำให้ Git พิจารณาใหม่เกือบทุกแง่มุมของการควบคุมเวอร์ชันที่ระบบอื่นส่วนใหญ่คัดลอกมาจากรุ่นก่อนหน้า สิ่งนี้ทำให้ Git เป็นเหมือนระบบไฟล์ขนาดเล็กมากขึ้นด้วยเครื่องมือที่ทรงพลังอย่างไม่น่าเชื่อที่สร้างขึ้นจากด้านบนแทนที่จะเป็น VCS
Jan Hudecเพิ่มความคิดเห็นที่สำคัญนี้:
แม้ว่ามันจะเป็นจริงและสำคัญในระดับแนวคิด แต่ก็ไม่เป็นความจริงในระดับที่เก็บข้อมูล
Git ไม่ใช้สันดอนสำหรับการจัดเก็บ
ไม่เพียงแค่นั้น แต่มันมีประสิทธิภาพมากกว่าในระบบอื่น ๆ เพราะมันไม่ได้เก็บประวัติต่อไฟล์เมื่อมันต้องการที่จะทำการบีบอัดเดลต้ามันใช้เวลาแต่ละหยดเลือกบาง blobs ที่มีแนวโน้มที่จะคล้ายกัน (ใช้การวิเคราะห์พฤติกรรมที่มีการประมาณที่ใกล้เคียงที่สุดของรุ่นก่อนหน้าและอื่น ๆ ) พยายามสร้าง deltas และเลือกที่เล็กที่สุด วิธีนี้สามารถ (มักจะขึ้นอยู่กับการวิเคราะห์พฤติกรรม) ใช้ประโยชน์จากไฟล์ที่คล้ายกันอื่น ๆ หรือรุ่นที่เก่ากว่าที่มีความคล้ายคลึงกว่าก่อนหน้านี้ พารามิเตอร์ "หน้าต่างแพ็ค" ช่วยให้ประสิทธิภาพการซื้อขายสำหรับคุณภาพการบีบอัดเดลต้า โดยทั่วไปค่าเริ่มต้น (10) ให้ผลลัพธ์ที่ดี แต่เมื่อพื้นที่มี จำกัด หรือเพื่อเพิ่มความเร็วในการถ่ายโอนเครือข่ายให้git gc --aggressiveใช้ค่า 250 ซึ่งทำให้มันทำงานช้ามาก แต่ให้การบีบอัดเพิ่มเติมสำหรับข้อมูลประวัติ