Anda dapat mengetahui apa yang Git lakukan dengan file dengan melihat apa yang dilakukannya ketika Anda menambahkannya ke indeks. Indeks seperti pra-komit. Dengan indeks yang dikomit, Anda dapat menggunakan git checkout
untuk membawa semua yang ada di indeks kembali ke direktori kerja. Jadi, apa yang dilakukan Git ketika Anda menambahkan tautan simbolis ke indeks?
Untuk mengetahuinya, pertama, buat tautan simbolik:
$ ln -s /path/referenced/by/symlink symlink
Git belum tahu tentang file ini. git ls-files
memungkinkan Anda memeriksa indeks Anda ( -s
hasil cetak stat
seperti):
$ git ls-files -s ./symlink
[nothing]
Sekarang, tambahkan konten tautan simbolik ke toko objek Git dengan menambahkannya ke indeks. Ketika Anda menambahkan file ke indeks, Git menyimpan kontennya di toko objek Git.
$ git add ./symlink
Jadi, apa yang ditambahkan?
$ git ls-files -s ./symlink
120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0 symlink
Hash adalah referensi ke objek dikemas yang dibuat di toko objek Git. Anda bisa memeriksa objek ini jika Anda mencari di .git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15c
root repositori Anda. Ini adalah file yang disimpan Git di repositori, yang nanti bisa Anda periksa. Jika Anda memeriksa file ini, Anda akan melihatnya sangat kecil. Itu tidak menyimpan konten file yang ditautkan.
(Catatan 120000
adalah mode yang tercantum dalam ls-files
output. Ini akan menjadi sesuatu seperti 100644
untuk file biasa.)
Tapi apa yang dilakukan Git dengan objek ini ketika Anda memeriksanya dari repositori dan ke sistem file Anda? Itu tergantung pada core.symlinks
konfigurasi. Dari man git-config
:
core.symlinks
Jika salah, tautan simbolik diperiksa sebagai file biasa berukuran kecil yang berisi teks tautan.
Jadi, dengan tautan simbolik dalam repositori, saat checkout Anda mendapatkan file teks dengan referensi ke path sistem file lengkap, atau tautan simbolik yang tepat, tergantung pada nilai core.symlinks
konfigurasi.
Bagaimanapun, data yang dirujuk oleh symlink tidak disimpan dalam repositori.
.gitignore
melihat symlink sebagai file, bukan folder.