Menjawab Masalah Git Ignore Global

Tim backend menemukan konfigurasi penting tidak ikut deploy padahal sudah di-commit, hanya beberapa environment tertentu yang mengeluh; penyebabnya adalah Git Ignore Global yang tidak disadari. Tulisan ini langsung menjawab gejala tersebut dengan diagnosis teknis dan perbaikan agar file konfigurasi tidak lagi hilang dari deploy.

Masalah yang Dilaporkan Tim

Seorang engineer memperhatikan layanan gagal karena koneksi database tidak sesuai. Investigasi awal menunjukkan file config/database.yml sudah ada di repository, tetapi tidak muncul di server staging setelah git pull. Tim lain juga melaporkan file migration tersisa di lokal namun belum tergabung ke branch deploy.

Gejalanya konsisten: file ada di working tree lokal, commit tersedia, tetapi saat deploy file tersebut tidak ikut karena Git mengabaikannya; tidak ada .gitignore dalam repository yang menyebut nama file tersebut.

Observasi dan Diagnosa

Periksa File yang Diabaikan oleh Git

Langkah pertama memastikan Git memang mengabaikan file: gunakan git check-ignore untuk memastikan sumber pengabaian.

git check-ignore -v config/database.yml

Output memperlihatkan file ini diabaikan dan menunjuk aturan tertentu. Jika perintah tidak mengeluarkan apa-apa, file tidak diabaikan.

Cek Aturan Ignore Tersembunyi

Git memiliki beberapa tempat selain .gitignore untuk membersihkan file. Gunakan perintah berikut untuk memeriksa aturan tersembunyi:

  • Global excludes: git config --get core.excludesfile (mis. ~/.config/git/ignore)
  • Local info/exclude: file .git/info/exclude
  • Sparse checkout: git sparse-checkout list, karena sparse checkout hanya menyertakan daftar path tertentu

Referensi seperti artikel Nelson Cloud menjelaskan bahwa konfigurasi tersebut sering dilupakan, menjadikan file tertentu terabaikan tanpa jejak di repo.

Analisis Root Cause

Dalam kasus ini, config/database.yml masuk dalam file global ignore tim yang digunakan untuk menghindari men-commit kredensial lokal. Developer baru yang clone repo tidak tahu ada aturan global ~/.gitignore_global yang memuat config/*.yml. Selama review tidak menemukan masalah karena file sudah ada di commit, namun server staging tetap tidak menerima file setelah git pull karena git tidak melacak file tersebut dari awal.

Ini menjelaskan mengapa behave berbeda terhadap environment: hanya developer dengan aturan ignore global tersebut yang tidak bisa menambahkan file baru ke index.

Solusi dan Perbaikan Workflow

Perbaikan dilakukan dalam beberapa tahap:

  1. Pastikan file sudah dilacak: Gunakan git add -f config/database.yml agar git menambah file meski biasanya di-ignore.
  2. Identifikasi dan update aturan yang bermasalah: edit file yang ditunjukkan git check-ignore -v, hapus entri yang terlalu luas (misalnya config/*.yml), dan buat aturan yang lebih spesifik bila perlu.
  3. Dokumentasikan aturan: tambahkan bagian baru di README atau dokumentasi praktik git tim yang menjelaskan lokasi global ignore, cara memeriksa (git config --get core.excludesfile), dan proses menambahkan file yang sempat diabaikan.
  4. Gunakan git sparse-checkout dengan jelas: jika sparse checkout digunakan, dokumentasikan path yang dimasukkan ke sparse-checkout agar anggota tim lain tidak kebingungan karena file tidak pernah dicopy lokal.
  5. Review proses deploy: pastikan pipeline CI memicu git status atau git ls-files untuk memverifikasi apakah file penting termasuk kedalam commit sebelum deploy.

Dengan perbaikan ini, file konfigurasi kembali terdeploy dengan konsisten di semua environment.

Best Practice dan Pencegahan

Jangan mengandalkan asumsi bahwa .gitignore satu-satunya tempat untuk mengatur file yang diabaikan. Berikut tips yang bisa diikuti:

  • Jangan terlalu umum: global ignore sebaiknya hanya berisi file generik seperti backup, IDE, atau OS temp. Hindari menaruh pola seperti config/*.yml.
  • Sediakan perintah pengecekan cepat: masukkan git check-ignore -v <path> ke dalam checklist review jika file tidak muncul saat deploy.
  • Gunakan tooling: buat skrip kecil untuk memastikan git sparse-checkout list dan git config --get core.excludesfile disertakan di onboarding developer baru.
  • Pelihara dokumentasi: dokumentasikan tempat ignore tersembunyi di README dan pastikan setiap perubahan aturan baru direview seperti biasa.

Dengan meninjau aturan-aturan tersebut secara berkala, tim dapat mencegah file penting hilang akibat Git Ignore Global yang tidak disadari.