Apa yang diabaikan dan apa yang di-commit
Kriteria untuk mengabaikan hasil build, dependensi, cache, dan rahasia serta meng-commit lockfile, contoh konfigurasi, dan pengaturan editor tim, ditambah .gitignore di subdirektori, direktori kosong, dan tips menggabungkan template.
.gitignore yang baik dinilai dari kriterianya, bukan panjangnya. Kriterianya hanya satu: apakah orang yang meng-clone repositori dari awal bisa membuat ulang hasil yang sama hanya dengan kode dan konfigurasi? Yang bisa dibuat ulang diabaikan; yang tidak bisa, atau yang mengunci hasil, di-commit.
Yang diabaikan
| Jenis | Contoh | Alasan |
|---|---|---|
| Hasil build | dist/, build/, target/, *.o, *.class | dibuat ulang dari kode |
| Hasil instalasi dependensi | node_modules/, vendor/ (PHP), .venv/ | dipasang ulang dari manifes dan lockfile |
| Cache dan log | .cache/, .pytest_cache/, *.log, coverage/ | berubah setiap kali dijalankan |
| Lingkungan lokal dan rahasia | .env, *.pem, local.properties, *.tfstate | berbeda per orang/lingkungan atau tidak boleh bocor |
| Status alat pribadi | .DS_Store, *.swp, .idea/workspace.xml | tidak berhubungan dengan proyek (disarankan gitignore global) |
Yang di-commit
- Lockfile:
package-lock.json,yarn.lock,pnpm-lock.yaml,Cargo.lock,poetry.lock,uv.lock,Gemfile.lock,composer.lock,go.sum,.terraform.lock.hcl. Menjamin semua orang memasang versi yang sama. Beberapa template, seperti milik Angular, mengabaikan lockfile, jadi periksa hasilnya. - Contoh konfigurasi:
.env.example,config.example.yml. Memberi tahu nilai apa yang dibutuhkan tanpa berisi rahasia sungguhan. - Wrapper alat build:
gradlewdangradle/wrapper/,mvnw. Pastikan jar wrapper tidak ikut terabaikan oleh*.jardari template Java. - Pengaturan editor yang disepakati tim:
.editorconfig,.vscode/settings.json,.vscode/extensions.json,.idea/codeStyles/. Berbagi aturan format dan lint memudahkan review.
.gitignore di subdirektori
.gitignore tidak hanya bisa ditaruh di root. .gitignore di subdirektori bekerja dengan direktori itu sebagai dasar dan lebih diutamakan daripada berkas di atasnya. Di monorepo yang tiap paketnya butuh aturan berbeda, menaruh berkas terpisah di tiap folder paket lebih mudah dibaca.
repo/
├── .gitignore # umum: .DS_Store, .env, coverage/
├── apps/web/.gitignore # .next/, out/
└── services/api/.gitignore # target/
Mempertahankan direktori kosong
git hanya melacak file dan tidak menyimpan direktori kosong. Agar sebuah folder tetap ada tetapi isinya diabaikan, seperti folder log, taruh file penanda di dalamnya lalu sertakan kembali dengan negasi.
/log/*
!/log/.keep
Nama seperti .keep atau .gitkeep bukan fitur resmi git, hanya kebiasaan. Nama apa pun bisa dipakai. Cara lain, taruh .gitignore berisi baris berikut di dalam folder itu; berkas ini mengabaikan semua kecuali dirinya sendiri.
*
!.gitignore
Saat menggabungkan template
- Kombinasi yang umum adalah 1–2 bahasa/framework + sistem operasi + editor. Jika aturan OS dan editor sudah ada di global, bagian itu bisa dilewati.
- Periksa urutannya. Template yang berisi aturan negasi (Gradle, VisualStudioCode) diletakkan setelah template dengan aturan luas (Java, Kotlin).
- Hapus duplikat tanpa mengubah makna. Aturan yang berulang tidak mengubah perilaku, tetapi menyulitkan pembacaan. Generator di situs ini hanya menghapus duplikat bila tidak ada aturan negasi di antaranya.
- Pertahankan komentar bagian. Berbulan-bulan kemudian Anda perlu tahu asal setiap aturan agar bisa menghapusnya dengan aman.
- Uji. Masukkan jalur sungguhan dari
git ls-fileske uji pola untuk memastikan tidak ada file yang terabaikan tanpa sengaja (misalnya kode front-end yang terkenalib/dari template Python).
Aturan yang pendek dan spesifik
Aturan yang terlalu luas seperti *.json ikut menelan berkas konfigurasi. Persempit jalurnya sebisa mungkin (/dist/) dan akhiri direktori dengan garis miring agar dibedakan dari file bernama sama. Komentar satu baris di atas aturan yang menjelaskan alasannya membantu orang berikutnya memutuskan apakah aturan itu boleh dihapus.
Referensi
- Dokumentasi resmi gitignore
- README repositori github/gitignore
- npm Docs: package-lock.json
- Diperiksa per: 2026-09-23