Git memang menyertakan untuk setiap komit salinan lengkap dari semua file, kecuali bahwa, untuk konten yang sudah ada di repo Git, snapshot hanya akan menunjuk ke konten yang dikatakan daripada menduplikatnya.
Itu juga berarti bahwa beberapa file dengan konten yang sama disimpan hanya sekali.
Jadi snapshot pada dasarnya adalah komit, merujuk pada isi struktur direktori.
Beberapa referensi yang bagus adalah:
Anda memberi tahu Git bahwa Anda ingin menyimpan snapshot dari proyek Anda dengan perintah git commit dan pada dasarnya merekam manifes apa yang terlihat dari semua file dalam proyek Anda pada saat itu
Lab 12 menggambarkan cara mendapatkan foto sebelumnya
The book progit memiliki gambaran yang lebih komprehensif snapshot:
Perbedaan utama antara Git dan VCS lainnya (termasuk Subversion dan teman-temannya) adalah cara Git berpikir tentang datanya.
Secara konseptual, sebagian besar sistem lain menyimpan informasi sebagai daftar perubahan berbasis file. Sistem ini (CVS, Subversion, Perforce, Bazaar, dan sebagainya) memikirkan informasi yang mereka simpan sebagai satu set file dan perubahan yang dibuat untuk setiap file dari waktu ke waktu

Git tidak memikirkan atau menyimpan datanya dengan cara ini. Sebagai gantinya, Git berpikir tentang datanya lebih seperti sekumpulan snapshot dari sistem file mini.
Setiap kali Anda berkomitmen, atau menyimpan status proyek Anda di Git, pada dasarnya ia mengambil gambar seperti apa semua file Anda pada saat itu dan menyimpan referensi ke snapshot itu.
Agar efisien, jika file tidak berubah, Git tidak menyimpan file lagi — hanya tautan ke file identik sebelumnya yang telah disimpannya.
Git berpikir tentang datanya seperti di bawah ini:

Ini adalah perbedaan penting antara Git dan hampir semua VCS lainnya. Itu membuat Git mempertimbangkan kembali hampir setiap aspek kontrol versi yang sebagian besar sistem lain disalin dari generasi sebelumnya. Ini membuat Git lebih seperti sistem file mini dengan beberapa alat yang sangat kuat yang dibangun di atasnya, bukan hanya VCS.
Jan Hudec menambahkan ini komentar penting :
Walaupun itu benar dan penting pada tingkat konseptual, itu TIDAK benar pada tingkat penyimpanan.
Git memang menggunakan delta untuk penyimpanan .
Tidak hanya itu, tetapi lebih efisien di dalamnya daripada sistem lainnya. Karena itu tidak menyimpan riwayat per file, ketika itu ingin melakukan kompresi delta, dibutuhkan setiap gumpalan, memilih beberapa gumpalan yang cenderung serupa (menggunakan heuristik yang mencakup perkiraan terdekat dari versi sebelumnya dan beberapa lainnya), mencoba untuk menghasilkan delta dan memilih yang terkecil. Cara ini dapat (seringkali, tergantung pada heuristik) memanfaatkan file serupa lainnya atau versi yang lebih lama yang lebih mirip dari sebelumnya. Parameter "paket jendela" memungkinkan kinerja perdagangan untuk kualitas kompresi delta. Default (10) umumnya memberikan hasil yang layak, tetapi ketika ruang terbatas atau untuk mempercepat transfer jaringan, git gc --aggressivemenggunakan nilai 250, yang membuatnya berjalan sangat lambat, tetapi memberikan kompresi tambahan untuk data histori.