Git melacak konten file, bukan nama file. Jadi, mengganti nama file tanpa mengubah isinya mudah dideteksi oleh git. (Git tidak melacak, tetapi melakukan deteksi ; menggunakan git mvatau git rmdan git addsecara efektif sama.)
Ketika sebuah file ditambahkan ke repositori, nama file tersebut ada di objek pohon. Konten file sebenarnya ditambahkan sebagai objek besar biner ( blob ) di repositori. Git tidak akan menambahkan blob lain untuk file tambahan yang berisi konten yang sama. Nyatanya, Git tidak bisa karena isinya disimpan dalam sistem berkas dengan dua karakter pertama dari hash menjadi nama direktori dan sisanya adalah nama berkas di dalamnya. Jadi untuk mendeteksi penggantian nama adalah masalah membandingkan hash.
Untuk mendeteksi perubahan kecil pada file yang diganti namanya, Git menggunakan algoritme tertentu dan batas ambang untuk melihat apakah ini adalah penggantian nama. Misalnya, lihat -Mbendera untuk git diff. Ada juga nilai konfigurasi seperti merge.renameLimit(jumlah file yang perlu dipertimbangkan saat melakukan deteksi ganti nama selama penggabungan).
Untuk memahami bagaimana git memperlakukan file serupa (misalnya, transformasi file apa yang dianggap sebagai ganti nama), jelajahi opsi konfigurasi dan flag yang tersedia, seperti yang disebutkan di atas. Anda tidak perlu diperhatikan dengan caranya. Untuk memahami bagaimana git sebenarnya menyelesaikan tugas-tugas ini, lihat algoritme untuk menemukan perbedaan dalam teks, dan baca kode sumber git.
Algoritme diterapkan hanya untuk tujuan diff, merge, dan log - algoritme tidak memengaruhi cara git menyimpannya. Setiap perubahan kecil dalam konten file berarti objek baru ditambahkan untuknya. Tidak ada delta atau perbedaan yang terjadi di tingkat itu. Tentu saja, nanti, objek mungkin dikemas di mana delta disimpan dalam file paket, tapi itu tidak terkait dengan deteksi penggantian nama.