.gitignore: Mengabaikan File dengan Pola
Menulis .gitignore yang benar: pola wildcard, folder, negasi, dan template bawaan GitHub.
Kenapa ada file yang tidak boleh di-commit?
Bayangin repo Git itu kayak koper yang dibawa ke mana-mana: ke GitHub, ke laptop teman, ke server. Tidak semua file pantas ikut jalan-jalan:
node_modules/: hasilnpm install, bisa 300 MB berisi puluhan ribu file, semuanya bisa dibuat ulang dengan satu perintah..env: berisi API key dan password. Commit file ini sama saja menempel password di papan pengumuman, dan bot jahat bisa menemukannya dalam hitungan menit setelah ke-push.dist/,build/: hasil kompilasi, bisa di-build ulang dari source yang sudah di-commit..DS_Store,Thumbs.db: sampah bawaan OS yang muncul sendiri.
KENAPA .gitignore ada? Karena Git secara default menganggap SEMUA file baru layak di-track. Tanpa daftar pengecualian, git add . akan menyeret semua sampah di atas ke dalam commit. .gitignore adalah caramu bilang ke Git: "file-file ini urusan lokal, jangan ikut campur." KAPAN dipakai? Di commit pertama, sebelum sampah sempat masuk riwayat. Membersihkan file yang telanjur ke-commit jauh lebih ribet daripada mencegahnya.
Menulis pola .gitignore
# komentar diawali tanda pagar
node_modules/
dist/
.env
*.log
!important.lognama/mengabaikan folder beserta isinya..envmengabaikan file bernama persis itu, di folder mana pun.*.logwildcard: semua file berakhiran.log.!important.lognegasi: file ini tetap di-track walau cocok pola*.log.
Contoh 1: kamu bingung kenapa debug.log tidak muncul di git status. Cek pola mana yang menangkapnya:
git check-ignore -v debug.log.gitignore:4:*.log debug.logKENAPA perintah ini ada? Untuk debugging. Saat file "hilang" dari git status padahal kamu butuh, perintah ini menunjuk biang keroknya (baris 4, pola *.log) dalam sedetik.
Contoh 2: bandingkan git status sebelum dan sesudah .gitignore ditulis:
git status --short
# SEBELUM: ?? .env, ?? node_modules/, ?? debug.log, ?? index.htmlgit status --short
# SESUDAH: ?? index.htmlHanya file yang pantas di-commit yang tersisa. KAPAN trik ini dipakai? Setiap kali kamu ragu polamu bekerja, verifikasi dengan git status SEBELUM commit.
Kesalahan umum pemula: salah vs benar
SALAH: memilah file manual tiap commit karena takut ada yang ikut.
git add index.html style.css app.js # melelahkan dan rawan bocorSekali lengah di tengah deadline, rahasia ikut ke-push dan sudah terlambat.
BENAR: tulis .gitignore di awal, lalu berani pakai git add . plus verifikasi:
git add .
git status --short # hanya file yang seharusnya yang munculSALAH: menambah .env ke .gitignore lalu mengira beres, padahal file itu SUDAH pernah di-commit. Jebakan paling klasik: .gitignore hanya berlaku untuk file yang belum di-track.
BENAR: hentikan pelacakannya secara eksplisit:
git rm --cached .env
git commit -m "Hentikan pelacakan .env"rm '.env'Flag --cached menghapus dari index Git tapi membiarkan file fisiknya tetap ada, jadi aplikasimu tetap jalan. Tanpa flag itu, file ikut terhapus dari folder.
Catatan teknis: kalau rahasia pernah ter-commit lalu dihapus dengan cara di atas, rahasianya TETAP ADA di riwayat Git. Butuh
git filter-repoatau BFG untuk membersihkan riwayat, plus segera revoke key yang bocor. Pencegahan selalu lebih murah daripada perbaikan.
Dari mana dapat pola yang bagus?
GitHub punya template resmi saat membuat repo baru (Node, Python, dsb), dan gitignore.io menggabungkan beberapa template sekaligus. Untuk sampah pribadi di semua repo (misal .DS_Store), pakai global gitignore agar .gitignore proyek tetap bersih:
git config --global core.excludesFile ~/.gitignore_globalTantangan
Audit repo latihanmu
Buat file .gitignore di repo latihanmu berisi: folder rahasia/, semua file .log, file .env, TAPI kecualikan penting.log. Lalu buat file-file tersebut dan jalankan git status --short. Pastikan tidak satu pun muncul kecuali penting.log (yang harus muncul sebagai untracked).
Kuis Bab
Uji pemahamanmu: Membaca Riwayat
Jawab 5 soal berikut, lalu tekan "Periksa Jawaban".
1.Pada output 'git status --short', arti ' M file.txt' (M di kolom kiri) adalah...
2.Perintah untuk melihat 5 commit terakhir dalam format ringkas adalah...
3.Perbedaan 'git diff' polos dan 'git diff --staged' adalah...
4.Kamu menemukan 100 commit dan bug muncul di antaranya. Cara tercepat menemukan pelakunya?
5.File .env sudah ter-commit, lalu kamu menambahkannya ke .gitignore. Apa yang terjadi?