guide

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

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

  1. File sudah dilacak. Ini yang paling sering. Jika git ls-files <jalur> menampilkan sesuatu, file itu dilacak. Hentikan pelacakan dengan git rm --cached.
  2. Direktori induk dikecualikan. Dengan dir/ diabaikan, !dir/file tidak berpengaruh. Ganti dengan dir/*.
  3. Urutan terbalik. Jika aturan yang lebih luas muncul lagi setelah negasi, aturan itu yang menang. Nomor baris dari check-ignore -v langsung memperlihatkannya.
  4. Spasi di akhir baris. Spasi di akhir *.log dihapus, tetapi spasi sebelum pola dan karakter tak terlihat seperti spasi lebar penuh tetap menjadi bagian pola.
  5. Arah garis miring. gitignore hanya memakai / sebagai pemisah jalur, termasuk di Windows. Pada build\output, garis miring terbalik dibaca sebagai escape sehingga tidak bekerja seperti yang dimaksud.
  6. Salah paham penjangkaran. config/local.json memiliki garis miring di tengah sehingga hanya cocok dengan config di root. Untuk kedalaman mana pun, gunakan **/config/local.json.
  7. Huruf besar-kecil. Di lingkungan dengan core.ignorecase bernilai false (biasanya Linux), *.JPG dan *.jpg berbeda. Repositori yang dibuat di macOS atau Windows biasanya bernilai true, 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

← SebelumnyaMengabaikan file yang sudah di-commit