gitgitignoreMenengah4 mnt baca

.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/: hasil npm 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.

bash
# komentar diawali tanda pagar
node_modules/
dist/
.env
*.log
!important.log
  • nama/ mengabaikan folder beserta isinya.
  • .env mengabaikan file bernama persis itu, di folder mana pun.
  • *.log wildcard: semua file berakhiran .log.
  • !important.log negasi: 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:

bash
git check-ignore -v debug.log
bash
.gitignore:4:*.log    debug.log

KENAPA 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:

bash
git status --short
# SEBELUM: ?? .env, ?? node_modules/, ?? debug.log, ?? index.html
bash
git status --short
# SESUDAH: ?? index.html

Hanya 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.

bash
git add index.html style.css app.js   # melelahkan dan rawan bocor

Sekali lengah di tengah deadline, rahasia ikut ke-push dan sudah terlambat.

BENAR: tulis .gitignore di awal, lalu berani pakai git add . plus verifikasi:

bash
git add .
git status --short   # hanya file yang seharusnya yang muncul

SALAH: 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:

bash
git rm --cached .env
git commit -m "Hentikan pelacakan .env"
bash
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-repo atau 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:

bash
git config --global core.excludesFile ~/.gitignore_global

Tantangan

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?