Saya baru saja mulai belajar git dan untuk itu saya mulai membaca Buku Komunitas Git , dan dalam buku ini mereka mengatakan bahwa SVN dan CVS menyimpan perbedaan antara file dan bahwa git menyimpan snapshot dari semua file.
Tapi saya tidak benar-benar mendapatkan apa yang mereka maksudkan dengan snapshot. Apakah git benar-benar membuat salinan dari semua file di setiap commit karena itulah yang saya mengerti dari penjelasan mereka.
PS: Kalau ada yang punya sumber yang lebih baik untuk belajar git saya akan sangat menghargainya.
Jawaban:
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:
Lab 12 menggambarkan cara mendapatkan foto sebelumnya
" Kamu bisa menemukan git (dan mungkin kamu sudah punya!) "
Apa itu "Snapshot" git?
Pelajari GitHub
The book progit memiliki gambaran yang lebih komprehensif snapshot:
Jan Hudec menambahkan ini komentar penting :
sumber
Git secara logis menyimpan setiap file di bawah SHA1-nya. Artinya adalah jika Anda memiliki dua file dengan konten yang persis sama di repositori (atau jika Anda mengganti nama file), hanya satu salinan yang disimpan.
Tetapi ini juga berarti bahwa ketika Anda memodifikasi sebagian kecil file dan melakukan, salinan lain dari file tersebut disimpan. Cara git memecahkan ini menggunakan file paket. Kadang-kadang, semua file "longgar" (sebenarnya, bukan hanya file, tetapi objek yang mengandung komit dan informasi direktori juga) dari repo dikumpulkan dan dikompresi menjadi file paket. File paket dikompres menggunakan zlib. Dan file serupa juga dikompresi delta.
Format yang sama juga digunakan ketika menarik atau mendorong (setidaknya dengan beberapa protokol), sehingga file-file tersebut tidak perlu dikompres lagi.
Hasil dari hal ini adalah repositori git, yang berisi seluruh copy pekerjaan yang tidak dikompresi, file terbaru yang tidak dikompresi, dan file yang lebih lama dikompres biasanya relatif kecil, dua kali lebih kecil dari ukuran copy pekerjaan. Dan ini berarti lebih kecil dari repo SVN dengan file yang sama, meskipun SVN tidak menyimpan sejarah secara lokal.
sumber