Berkas yang tidak seharusnya dilacak, seperti hasil kompilasi, log, dan kredensial lokal, dapat dikeluarkan dari pandangan Git melalui berkas .gitignore. Topik ini membahas pola penulisan .gitignore, urutan pencocokan polanya, alat pemeriksaan git check-ignore, jebakan berkas yang sudah terlanjur dilacak, dan berkas ignore global. Ignore yang tertata menjaga git status tetap bersih dan mencegah berkas sensitif terbawa dalam commit.
Pola dasar .gitignore#
Berkas .gitignore diletakkan di akar repository dan berisi satu pola per baris. Git mencocokkan pola tersebut terhadap jalur berkas, dan berkas yang cocok tidak muncul sebagai untracked di git status. Pola paling sederhana adalah nama berkas, *.ext untuk pola ekstensi, dan folder/ untuk seluruh isi folder. Tanda pagar mengawali komentar.
Siapkan folder latihan berisi beberapa berkas yang lazim diabaikan. Tanggal commit pada contoh ditetapkan terlebih dahulu agar hash pada keluaran dapat direproduksi, lalu buat .gitignore-nya.
# tanggal commit ditetapkan agar keluaran contoh dapat direproduksi secara persis
export GIT_AUTHOR_DATE="2026-11-01T09:00:00+07:00"
export GIT_COMMITTER_DATE="2026-11-01T09:00:00+07:00"rm -rf /tmp/lab-ignore
mkdir -p /tmp/lab-ignore/log
cd /tmp/lab-ignore
git init -b main
git config user.name "Budi"
git config user.email "[email protected]"
printf "isi program\n" > app.txt
printf "catatan debug\n" > log/debug.log
printf "sementara\n" > sementara.tmp
printf "kredensial\n" > rahasia.txt
printf "# hasil proses\nlog/\n*.tmp\nrahasia.txt\n" > .gitignore
git statusInitialized empty Git repository in /tmp/lab-ignore/.git/
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
app.txt
nothing added to commit but untracked files present (use "git add" to track)Tiga berkas menghilang dari daftar untracked, sehingga yang tersisa hanya .gitignore dan app.txt. Berkas .gitignore sendiri justru harus di-commit, karena pola ignore adalah bagian dari proyek yang perlu dipakai bersama oleh seluruh anggota tim. Berkas rahasia dan log tetap ada di disk, hanya tidak dilacak Git.
Memeriksa pola dengan git check-ignore#
Ketika sebuah berkas masih muncul padahal seharusnya diabaikan, atau sebaliknya, perintah git check-ignore -v menunjukkan pola mana yang berperan.
git check-ignore -v log/debug.log
git check-ignore -v sementara.tmp.gitignore:2:log/ log/debug.log
.gitignore:3:*.tmp sementara.tmpKeluaran -v berbentuk berkas:baris:pola<TAB>jalur, sehingga sumber setiap kecocokan dapat dilacak langsung ke barisnya. Perintah ini menjadi alat baku untuk menelusuri mengapa sebuah pola tidak bekerja, misalnya karena pola lain yang lebih spesifik menimpanya.
Urutan pencocokan dan negasi#
Ketika beberapa pola cocok dengan satu berkas, pola yang terakhir ditulis dalam .gitignore yang menang. Sifat ini dipakai untuk negasi melalui awalan !, yaitu pengecualian atas pola yang lebih luas. Posisi barisnya menentukan hasilnya: pola pengecualian harus ditulis setelah pola yang menimpanya.
printf "*.log\n!important.log\nrahasia.txt\n" > .gitignore
git check-ignore -v log/debug.log
git check-ignore -v penting.log.gitignore:1:*.log log/debug.log
.gitignore:1:*.log penting.logBerkas log/debug.log tetap diabaikan oleh pola *.log, sedangkan penting.log dicocokkan oleh pola negasi sehingga tidak diabaikan lagi. Satu batasan penting: Git tidak dapat mengabaikan isi sebuah folder yang sudah dinyatakan diabaikan melalui pola folder, karena Git bahkan tidak masuk ke dalam folder itu. Pengecualian pada kasus tersebut ditulis dengan pola berkas, misalnya log/* diikuti !log/keep.log.
Jebakan berkas yang sudah terlanjur dilacak#
.gitignore hanya memengaruhi berkas yang belum dilacak. Berkas yang sudah menjadi bagian commit tetap dilacak, dan perubahannya tetap muncul di git status, betapapun cocok polanya. Tambahkan rahasia.txt ke riwayat secara tidak sengaja, lalu amati perilakunya.
git add rahasia.txt
git commit -m "Tambah konfigurasi awal"
printf "kredensial baru\n" > rahasia.txt
git status -sThe following paths are ignored by one of your .gitignore files:
rahasia.txt
hint: Use -f if you really want to add them.
hint: Disable this message with "git config advice.addIgnoredFile false"
On branch main
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
app.txt
sementara.tmp
nothing added to commit but untracked files present (use "git add" to track)
?? .gitignore
?? app.txt
?? sementara.tmpPola rahasia.txt yang ada di .gitignore tidak berpengaruh, karena berkas itu sudah menjadi bagian riwayat. Untuk berhenti melacak tanpa menghapus berkas dari disk, gunakan git rm --cached, lalu commit keputusan itu.
git rm --cached rahasia.txt
git commit -m "Berhenti melacak berkas rahasia"
git status -sfatal: pathspec 'rahasia.txt' did not match any files
On branch main
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
app.txt
sementara.tmp
nothing added to commit but untracked files present (use "git add" to track)
?? .gitignore
?? app.txt
?? sementara.tmpStatus kembali bersih: berkas masih ada di disk, tetapi sudah tidak dilacak dan kini cocok dengan pola ignore. Perlu diingat bahwa commit lama yang pernah memuat isinya masih menyimpannya, sehingga berkas yang benar-benar sensitif memerlukan langkah lebih lanjut, seperti mengganti kredensial tersebut.
Berkas ignore global#
Pola yang berlaku untuk seluruh repository milik satu pengguna, misalnya berkas editor *.swp atau Thumbs.db, lebih tepat ditempatkan pada berkas ignore global daripada diulang di setiap proyek. Lokasinya ditunjukkan oleh kunci core.excludesFile.
# tidak-dijalankan
# konfigurasi global menulis ke berkas milik pengguna
git config --global core.excludesFile ~/.gitignore_globalSetelah kunci itu disetel, berkas yang ditunjuk dipakai sebagai lapisan ignore tambahan di seluruh repository pengguna tersebut. Urutan prioritasnya dari yang paling kuat: pola di .gitignore dalam repository, kemudian berkas ignore global, kemudian berkas ignore tingkat sistem.
Ringkasan#
.gitignoreberisi satu pola per baris, harus di-commit, dan mengeluarkan berkas yang cocok darigit statustanpa menghapusnya dari disk.- Pola yang terakhir cocok menentukan hasil, sehingga negasi
!bekerja bila ditulis setelah pola yang lebih luas. - Berkas yang sudah terlanjur dilacak tetap dilacak, dan melepaskannya memerlukan
git rm --cacheddisertai commit. - Pola lintas proyek milik pribadi ditempatkan pada berkas ignore global melalui
core.excludesFile.
Referensi#
- gitignore — Git Documentation
— spesifikasi resmi pola
gitignorebeserta urutan prioritasnya. - Recording Changes to the Repository — Pro Git — bagian Ignoring Files pada Pro Git.