Apa Itu Gitignore Dan Cara Membuatnya

| | Git - Version Control
Apa Itu Gitignore Dan Cara Membuatnya

.gitignore adalah file konfigurasi git yang memberi tahu git file/folder mana yang tidak boleh dilacak (tracked). ini mencegah file sampah, cache, dan file sensitif masuk ke repository. kalau kalian belum pernah pake git sama sekali, mulakan dulu dari panduan install git di windows.

saya baru ngerasain pentingnya .gitignore setelah kejadian yang bikin deg-degan: tanpa sengaja saya commit file .env berisi password database. untungnya project pribadi, jadi langsung saya perbaiki. sejak saat itu, tiap bikin project baru, file .gitignore adalah hal pertama yang saya buat, sebelum nulis kode apa pun.

1. Kenapa .gitignore Penting?

bayangin kalian jalanin git status dan ketemu keluaran begini:

Untracked files:
  node_modules/
  .env
  vendor/
  __pycache__
  .DS_Store
  debug.log

file-file ini nggak perlu masuk repository karena:

  • node_modules/: bisa ratusan file, install ulang via npm install
  • .env: berisi password dan api key
  • vendor/: install ulang via composer install
  • __pycache__/: cache python, otomatis dibuat ulang
  • .DS_Store: file metadata sistem macos
  • *.log: biasanya log debug, nggak perlu di-commit

semua masalah di atas .gitignore atur sekali, selesai dengan satu file.

2. Cara Membuat .gitignore

buat file bernama .gitignore (dengan titik di depan) di root folder project, lalu isi pake text editor. kalau pake VS Code, biasanya dia bahkan ngasih saran template otomatis. di terminal, cukup:

touch .gitignore

kalau di Windows dan mau bikin lewat File Explorer, ada triknya: nama .gitignore diawali titik, dan Explorer menolak nama seperti itu. solusinya gampang, kasih nama .gitignore. (dengan titik di akhir), Windows otomatis ngebuang titik terakhirnya, atau langsung bikin lewat VS Code atau command prompt pakai:

type nul > .gitignore

Contoh Dasar

# Komentar diawali tanda #
node_modules/
.env
vendor/
__pycache__/
*.log
.DS_Store

tiap baris satu pola. komentar pakai #. kalau mau ignore file yang namanya pasti, tinggal ketik nama filenya.

3. Pola Pattern .gitignore

PatternArtiContoh
file.txtFile spesifik (tanpa slash, cocok di mana saja)config.php di root atau src/config.php
folder/Seluruh folder (trailing slash = directory only)node_modules/
*.logSemua file .logerror.log, debug.log
!file.txtKecualikan dari ignore (harus setelah pola yang meng-ignore)!important.log
build/*.tmpHanya .tmp di folder build (single * tidak tembus slash)build/cache.tmp tapi bukan build/nested/cache.tmp
**/tempFolder temp di kedalaman mana sajasrc/temp, tests/temp
/build/Anchored ke root (leading slash)hanya build/ di root, bukan src/build/
doc/frotzAda slash di tengah = anchored jugasama seperti /doc/frotz

Contoh Lebih Detail

# Ignore semua file .tmp
*.tmp

# Tapi jangan ignore file .tmp yang penting
!penting.tmp

# Ignore isi folder build, kecuali build/config/
build/*
!build/config/
!build/config/**

# Ignore .env tapi tidak .env.example
.env
!.env.example

rule ** rekursif ke semua subfolder, dan ! justru “un-ignore”, sering dipakai buat file config penting yang mau eksis meski folder induknya di-ignore. ini trik yang sering bikin orang bingung, jadi saya sarankan baca pelan-pelan lagi kalau butuh.

satu aturan penting soal ! (dari git-scm.com/docs/gitignore): pola kecualian cuma bisa jalan kalau folder induknya tidak ikut ter-ignore. contoh di atas, build/* di-ignore (isinya saja, bukan foldernya), tapi build/config/ di-un-ignore dulu, baru isinya build/config/** di-un-ignore. kalau kalian ignore build/ (seluruh folder dengan trailing slash), git tidak akan pernah masuk ke dalamnya, jadi !build/config/ tidak bakal berpengaruh. ini bukan bug, memang desain git demi performa.

Folder Kosong dan .gitkeep

satu fakta git yang bikin bingung: git tidak bisa melacak folder kosong, folder cuma di-track kalau ada file di dalamnya. tapi kadang kalian butuh folder kosong tetap ikut ke repository, misalnya uploads/ atau storage/logs/ yang harus eksis di server. solusinya kasih file kosong bernama .gitkeep di dalamnya:

# uploads/ di-ignore, tapi foldernya tetap ada di repo
uploads/*
!uploads/.gitkeep

.gitkeep itu cuma nama file biasa, bukan fitur bawaan git, tapi sudah jadi konvensi komunitas. file-nya biasanya kosong, dan isinya tidak penting, yang penting foldernya jadi terlacak.

4. Template Berdasarkan Project

PHP / Laravel

/vendor/
/node_modules/
.env
.DS_Store
*.log
/public/storage
/storage/*.log
storage/debugbar
.phpunit.result.cache
Homestead.json
Homestead.yaml
.php_cs.cache

Python

__pycache__/
*.py[cod]
*.so
*.egg-info/
dist/
build/
.eggs/
.venv/
env/
venv/
*.db
*.sqlite
.DS_Store

Node.js

node_modules/
.env
.env.local
dist/
build/
*.log
npm-debug.log*
.DS_Store
coverage/
.nyc_output/
.idea/
.vscode/

React / Create React App

node_modules/
build/
.env
.env.local
*.log
.DS_Store
coverage/
.idea/
.vscode/

5. .gitignore Tidak Berfungsi?

ini dia masalah paling sering ditanyakan ke saya. sebabnya: file sudah dilacak (tracked) sebelum .gitignore dibuat, karena .gitignore cuma berlaku untuk file yang belum pernah disentuh git.

# Cek apakah file sudah dilacak
git ls-files .env

# Kalau ada output, berarti sudah dilacak. hilangkan dari tracking (tanpa hapus file)
git rm --cached .env

# atau bersihkan seluruh cache
git rm -r --cached .

# lalu commit ulang
git add .
git commit -m "Fix .gitignore"

setelah git rm --cached, file tetap ada di lokasi kerja tapi sudah tidak dilacak lagi, dan dari commit berikutnya .gitignore akan menanganinya dengan benar.

Debug dengan git check-ignore

kalau penasaran kenapa sebuah file ke-ignore padahal tidak kalian tulis di .gitignore, atau sebaliknya kenapa pola kalian tidak kena, ada perintah khusus buat ngecek:

# file mana yang bikin pola ini ter-ignore?
git check-ignore -v debug.log

# contoh output:
# .gitignore:6:*.log	debug.log

output di atas artinya debug.log ter-ignore karena baris ke-6 di .gitignore yang isinya *.log. kalau tidak ada output sama sekali, berarti file itu tidak di-ignore.

6. Global .gitignore

kalau ada file yang mau di-ignore di semua project tanpa bikin .gitignore di tiap folder, pakai aturan global. git sendiri sudah punya default di ~/.config/git/ignore (atau $XDG_CONFIG_HOME/git/ignore), tapi paling aman set eksplisit:

# Tentuin file exclude global
git config --global core.excludesFile ~/.gitignore_global
# cek sudah kepasang belum
git config --get core.excludesFile

# lalu isi pola yang sering di-ignore
echo ".DS_Store" >> ~/.gitignore_global
echo ".env.local" >> ~/.gitignore_global
echo "Thumbs.db" >> ~/.gitignore_global
echo ".idea/" >> ~/.gitignore_global

atau pakai .git/info/exclude kalau mau pola yang cuma berlaku di satu repository, tanpa ikut ter-commit ke repository (cocok buat pola pribadi yang tidak mau dibagi ke tim). ini berguna banget kalau kalian kerja di banyak mesin atau project yang sama-sama make sistem operasi yang sama. di VS Code, aktifkan search.useGlobalIgnoreFiles biar pencarian juga hormatin global ignore.

7. Template Siap Pakai

github punya kumpulan template .gitignore siap pakai untuk hampir semua bahasa dan framework di github.com/github/gitignore.

atau bisa pakai gitignore.io, tinggal ketik bahasa atau framework, file langsung jadi. ini yang biasa saya pakai pas bikin project baru, lebih cepat dari ngetik manual, dan jarang ketinggalan pola.

Kesimpulan

  • .gitignore bersihin repository dari file tidak perlu, cache, file rahasia, sampai file sistem operasi
  • pola dasar: file, folder/, *.ekstensi, !kecualikan, **/rekursif, /anchored, folder/ = directory only
  • kalau file sudah dilacak sebelum ditambah .gitignore, lepas tracking-nya pake git rm --cached baru akan patuh
  • bikin .gitignore pertama kali, jangan ditunda sampai project lama, dan urutan ! harus setelah pola yang di-ignore
  • .env asli di .gitignore, kasih template di .env.example biar tim tetap bisa jalan
  • cek yang bingung pakai git check-ignore -v, dan untuk global pakai core.excludesFile atau ~/.config/git/ignore

Baca Juga Mengenai :


Pertanyaan yang Sering Diajukan

Apa itu file .gitignore?

.gitignore adalah file teks biasa di folder root repository yang berisi daftar pola (patterns). git pakai ini untuk memutuskan file dan folder mana yang dilacak (tracked) dan mana yang diabaikan. biasanya ada di setiap project yang kode-nya disimpan di repository git.

Bagaimana cara membuat .gitignore?

buat file bernama .gitignore (perhatikan titik di awal) di root folder project. bisa pakai text editor, VS Code, atau cukup jalankan touch .gitignore di terminal. satu pola per baris.

Apa perbedaan .gitignore dan .gitignore global?

.gitignore lokal hanya berlaku di satu repository saja. .gitignore global (lewat core.excludesFile atau .git/info/exclude) berlaku semua repo di komputer, cocok untuk hal spesifik mesin kayak .DS_Store.

Kenapa .gitignore tidak bekerja setelah dibuat?

karena file itu sudah pernah dilacak oleh git sebelumnya. .gitignore cuma berlaku untuk file baru. untuk berhentikan tracking, pake git rm --cached.

Apa maksud pola wildcard di .gitignore?

di .gitignore, bintang tunggal berarti karakter apa saja satu level, bintang ganda berarti rekursif ke subfolder, dan tanda seru berarti kecualikan dari ignore. misalnya semua file log diabaikan, folder build di mana saja diabaikan, atau file penting dikecualikan.

Cara stop tracking file tapi tetap simpan di lokasi?

pake git rm --cached nama_file untuk ngeluarin file dari git sambil menyisakan file di lokasi kerja. commit perubahanannya, lalu tambahkan polanya ke .gitignore.

Apa itu .gitkeep dan kenapa folder kosong tidak ter-track?

git tidak bisa melacak folder kosong. .gitkeep adalah file kosong yang sengaja ditaruh di folder supaya folder tersebut ikut ter-track ke repository. nama .gitkeep cuma konvensi, bukan fitur resmi git.

Bagaimana cara cek kenapa sebuah file ter-ignore?

pakai git check-ignore -v nama_file. git bakal nunjukin baris .gitignore mana yang bikin file itu ter-ignore, lengkap dengan lokasi file pola-nya.

Sigit Nurhanafi avatar
Full-stack developer & technical writer. Berpengalaman di PHP, Laravel, NodeJS, MySQL, dan Python. Aktif menulis tutorial pemrograman dan maintaining open-source projects di PemburuKode sejak 2021.