Mengapa diabaikan? Debugging dengan git check-ignore
Cara menemukan aturan yang mengabaikan sebuah file dengan git check-ignore -v, git status --ignored dan git ls-files, serta memeriksa tujuh penyebab umum aturan yang tidak berfungsi.
Ketika aturan makin banyak, muncul pertanyaan "mengapa file ini tidak terlihat?" atau "mengapa masih terlihat?". git punya perintah untuk menjawabnya.
git check-ignore -v
git check-ignore -v logs/app.log src/build/keep.txt
Keluarannya berformat sumber:nomor_baris:pola<TAB>jalur.
.gitignore:3:*.log logs/app.log
- Sumber adalah berkas yang memuat aturan:
.gitignore,sub/.gitignore,.git/info/exclude, atau jalur berkas global. - Nomor baris dan pola menunjukkan baris mana tepatnya.
- Jika tidak ada keluaran, jalur itu tidak diabaikan.
- Dengan
-v, kasus yang disertakan kembali dengan!juga ditampilkan beserta aturan negasinya, seperti.gitignore:4:!keep.log keep.log. - Untuk file yang direktori induknya dikecualikan, yang ditampilkan adalah aturan direktori tersebut. Misalnya, jika penyebabnya aturan
logs/, keluarannya.gitignore:1:logs/ logs/keep.txt.
Untuk melihat juga jalur yang tidak cocok, tambahkan --non-matching (-n).
File yang dilacak: --no-index
Karena aturan abaikan tidak berlaku untuk file yang sudah dilacak, check-ignore secara bawaan tidak menampilkan apa pun untuknya. Jika hanya ingin tahu apakah aturan cocok dengan file itu, tambahkan --no-index.
$ git check-ignore -v app.log # dilacak, tanpa keluaran
$ git check-ignore -v --no-index app.log
.gitignore:3:*.log app.log
Melihat daftar file yang diabaikan
# tampilkan item yang diabaikan bersama status (tanda !!)
git status --ignored --short
# daftar semua file yang diabaikan, satu per satu
git ls-files --others --ignored --exclude-standard
# file terlacak yang cocok dengan aturan abaikan
git ls-files -ci --exclude-standard
Jika seluruh direktori diabaikan, git status --ignored menampilkannya sebagai satu item, seperti !! logs/. Untuk melihat per file, gunakan ls-files.
Penyebab umum aturan tidak berfungsi
- File sudah dilacak. Ini yang paling sering. Jika
git ls-files <jalur>menampilkan sesuatu, file itu dilacak. Hentikan pelacakan dengangit rm --cached. - Direktori induk dikecualikan. Dengan
dir/diabaikan,!dir/filetidak berpengaruh. Ganti dengandir/*. - Urutan terbalik. Jika aturan yang lebih luas muncul lagi setelah negasi, aturan itu yang menang. Nomor baris dari
check-ignore -vlangsung memperlihatkannya. - Spasi di akhir baris. Spasi di akhir
*.logdihapus, tetapi spasi sebelum pola dan karakter tak terlihat seperti spasi lebar penuh tetap menjadi bagian pola. - Arah garis miring. gitignore hanya memakai
/sebagai pemisah jalur, termasuk di Windows. Padabuild\output, garis miring terbalik dibaca sebagai escape sehingga tidak bekerja seperti yang dimaksud. - Salah paham penjangkaran.
config/local.jsonmemiliki garis miring di tengah sehingga hanya cocok denganconfigdi root. Untuk kedalaman mana pun, gunakan**/config/local.json. - Huruf besar-kecil. Di lingkungan dengan
core.ignorecasebernilaifalse(biasanya Linux),*.JPGdan*.jpgberbeda. Repositori yang dibuat di macOS atau Windows biasanya bernilaitrue, sehingga aturan bisa berjalan di lokal tetapi gagal di CI.
Periksa dulu di peramban
Jika ingin membandingkan hasil sambil mengubah aturan sebelum menerapkannya ke repositori, tab Uji pola di situs ini praktis. Tempelkan aturan dan daftar jalur, maka untuk setiap jalur ditampilkan hasil, aturan penentu (dengan nomor baris), dan kasus yang diabaikan karena direktori induk. Daftar jalur bisa diambil dari keluaran git ls-files atau find . -type f. Keputusan akhir, yang mencakup .gitignore di subdirektori dan konfigurasi global, tetap diperiksa di repositori dengan git check-ignore -v.
Referensi
- Dokumentasi resmi git-check-ignore
- Dokumentasi resmi git-status: --ignored
- Dokumentasi resmi git-ls-files
- Diperiksa per: 2026-09-23 (format keluaran diverifikasi dengan git 2.50.1)