Daftar Untracked files pada git status
adalah tempat berkas baru menunggu keputusan: dilacak, atau dibiarkan. Masalahnya, proyek nyata terus-menerus melahirkan berkas yang tidak akan pernah kita lacak — dependensi yang di-install ulang, hasil build, berkas log, sampai berkas .env berisi kredensial lokal. Tanpa mekanisme penyaring, daftar itu berubah menjadi derau yang menenggelamkan satu-dua berkas penting yang benar-benar menunggu keputusan. Mekanisme itu bernama .gitignore: berkas di root repository yang berisi daftar pola untuk berkas-berkas yang sengaja tidak ingin dilacak Git.
Derau Proyek di git status #
Kita bangun repository latihan kecil, lalu biarkan “pekerjaan sehari-hari” menambahkan derau khas proyek web — pustaka terpasang, hasil build, log, dan kredensial lokal:
mkdir latihan-gitignore && cd latihan-gitignore
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf '# Situs Toko Berkah\nberanda toko\n' > situs.md
git add situs.md
git commit -m "Buat beranda toko"
mkdir -p node_modules build dist
printf 'pustaka kemasan\n' > node_modules/kemasan.txt
printf '<p>beranda</p>\n' > build/beranda.html
printf '<p>beranda</p>\n' > dist/beranda.html
printf 'menulis jejak debug\n' > debug.log
printf 'KUNCI_API=contoh-rahasia\n' > .env
git statusOutput yang Dihasilkan:
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env
build/
debug.log
dist/
node_modules/
nothing added to commit but untracked files present (use "git add" to track)Lima entri untracked itu nyaris seluruhnya sampah dari sudut pandang riwayat: node_modules/ dapat dipulihkan kapan saja lewat manajer paket, build/ dan dist/ dihasilkan ulang setiap kali kita membangun situs, debug.log adalah jejak proses, dan .env justru berbahaya bila sampai ter-commit. Satu-satunya berkas bernilai jangka panjang — situs.md — sudah berada di riwayat dan tidak muncul lagi di status.
Menyusun .gitignore #
Berkas .gitignore diletakkan di root repository. Setiap baris memuat satu pola; baris kosong diabaikan; baris yang diawali # adalah komentar:
# dependensi terpasang
node_modules/
# berkas log
*.log
# kredensial lokal
.env
# hasil build
build/
dist/Amati dampaknya pada status:
git statusOutput yang Dihasilkan:
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)Derau lenyap seluruhnya, dan yang tersisa hanya .gitignore itu sendiri. Tiga bentuk pola di atas sudah menutup kebutuhan dasar: node_modules/ dengan garis miring di akhir menyasar direktori bernama node_modules beserta seluruh isinya; *.log dengan tanda bintang menyamarkan semua berkas berakhiran .log di kedalaman mana pun; .env menyamarkan berkas dengan nama persis itu. Bedah tiap pola beserta jangkar direktori dan negasinya dibahas tuntas pada chapter Pola .gitignore
.
Berkas yang diabaikan tidak dihapus dari disk — isi node_modules/, build/, dan dist/ tetap utuh di folder proyek. .gitignore hanya menyembunyikan berkas dari pandangan Git, bukan dari sistem berkas.
.gitignore Ikut di-commit #
.gitignore sendiri adalah berkas biasa, dan lazimnya justru dilacak:
git add .gitignore
git commit -m "Tambah .gitignore proyek"Output yang Dihasilkan:
[main 364b5bd] Tambah .gitignore proyek
1 file changed, 12 insertions(+)
create mode 100644 .gitignoreDengan commit ini, aturan penyaring menjadi bagian dari repository. Setiap rekan yang men-clone — Siti, anggota tim baru, mesin build — langsung menerima daftar yang sama, tanpa perlu menyusun ulang. Penyebutan “12 insertions” pada ringkasan di atas menghitung seluruh baris berkas, termasuk komentar dan baris kosong. Hash 364b5bd milik sandbox — di mesin pembaca nilainya berbeda, karena hash dihitung dari isi dan waktu commit. Status pun kini benar-benar sunyi:
git statusOutput yang Dihasilkan:
On branch main
nothing to commit, working tree cleanMendiagnosis Pola dengan git check-ignore -v #
Suatu saat pasti muncul pertanyaan: “berkas ini kok tidak muncul di status?” atau “pola mana yang menyamarkannya?” Perintah git check-ignore -v menjawab dengan menunjuk pola yang menangkap sebuah path:
git check-ignore -v debug.logOutput yang Dihasilkan:
.gitignore:5:*.log debug.logEmpat kolom dipisah TAB: sumber pola (.gitignore), nomor baris pola (5), isi polanya (*.log), dan path yang diperiksa (debug.log). Pola direktori pun dilacak sampai ke berkas di dalamnya:
git check-ignore -v build/beranda.htmlOutput yang Dihasilkan:
.gitignore:11:build/ build/beranda.htmlSebaliknya, berkas yang tidak diabaikan membuat perintah ini sunyi dan mengembalikan kode status 1 — bukan kesalahan, hanya jawaban “tidak ada pola yang cocok”:
git check-ignore -v situs.md; echo "kode status: $?"Output yang Dihasilkan:
kode status: 1Pola Hanya Menyamarkan Berkas Untracked #
Aturan yang paling sering menjebak: .gitignore bekerja pada berkas untracked. Git tidak pernah menengahi berkas yang sudah masuk riwayat. Bukti paling cepatnya terlihat saat kita mencoba mendaftarkan berkas yang diabaikan:
git add debug.logOutput yang Dihasilkan:
The following paths are ignored by one of your .gitignore files:
debug.log
hint: Use -f if you really want to add them.
hint: Disable this message with "git config advice.addIgnoredFile false"git add menolak karena pola *.log menyamarkan debug.log, dan Git meminta keputusan eksplisit lewat opsi -f bila kita sungguh ingin melacaknya. Sebaliknya, berkas yang terlanjur tracked sebelum pola ditulis tetap dilacak penuh — suntingan pada .env yang sudah pernah di-commit akan tetap muncul sebagai modified meski .env tercantum di .gitignore. Prosedur menghentikan pelacakan tanpa menghapus berkas dari disk dibahas pada chapter Mengabaikan File yang Terlanjur Dilacak
.
Daftar lengkap sintaks pola — bentuk resmi per baris, aturan prioritas antar-sumber — terdokumentasi pada dokumentasi gitignore . Namun sebelum menghafal seluruh sintaks, ada baiknya kita membedah dulu satu per satu pola yang paling sering dipakai: bintang, garis miring, dan tanda seru. Lanjut ke Pola .gitignore .