Best Practices, Security & Quiz 3.4-3.5
Tujuan Pembelajaran
- Memahami best practices dalam penggunaan Git
- Mengenal aspek keamanan repository
- Mampu melakukan audit keamanan repo
- Mengevaluasi pemahaman modul 3.4-3.5
Materi Inti
A. Git Best Practices
1. Atomic Commits
Satu commit harus berisi satu perubahan logis yang utuh. Jangan mencampur fitur baru, bugfix, dan refactoring dalam satu commit.
# BAIK: atomic commits
git commit -m "feat: tambah validasi email di form login"
git commit -m "fix: perbaiki typo di halaman about"
git commit -m "refactor: pisahkan fungsi auth ke file terpisah"
# BURUK: commit campur aduk
git commit -m "tambah validasi, perbaiki typo, refactor auth"
2. Pesan Commit yang Baik
<tipe>(<scope>): <subject> <- max 50 karakter
<body> <- jelaskan MENGAPA, bukan APA
(opsional, wrap 72 karakter)
<footer> <- referensi issue, breaking changes
(opsional)
Contoh pesan commit lengkap:
feat(auth): tambah validasi email di form registrasi
Sebelumnya user bisa mendaftar dengan format email tidak valid
(misalnya "abc" tanpa @). Validasi ini menggunakan regex standar
RFC 5322 untuk memastikan format email benar sebelum submit.
Closes #42
3. Branching Discipline
- Jangan commit langsung ke main — selalu gunakan feature branch
- Branch protection: aktifkan di GitHub Settings
- Hapus branch setelah merge
- Gunakan naming convention:
feature/,fix/,hotfix/,docs/
4. Regular Push
# Push secara regular untuk backup dan kolaborasi
git push origin feature/login
# Jangan menumpuk banyak commit lokal tanpa push
5. Gunakan .gitignore Sejak Awal
Buat .gitignore sebagai langkah pertama di project baru. Template tersedia di https://github.com/github/gitignore.
B. Security Best Practices
1. Jangan Pernah Commit Secrets
# File yang TIDAK boleh di-commit:
# - .env (environment variables, API keys)
# - credentials.json
# - *.pem, *.key (private keys)
# - config/secrets.yml
# Pastikan ada di .gitignore SEBELUM membuat file
echo ".env" >> .gitignore
echo "*.pem" >> .gitignore
echo "credentials.json" >> .gitignore
2. Cari Secrets yang Tidak Sengaja Ter-commit
# Cek apakah file .env pernah ada di history
git log --all --full-history -- "*.env"
# Cari pattern sensitif di kode
grep -r "API_KEY\|SECRET\|PASSWORD" --include="*.js" --include="*.py"
# Cari hardcoded credentials
grep -rn "password\s*=" --include="*.js" --include="*.py" --include="*.ts"
3. Recovery Jika Secrets Sudah Ter-commit
# LANGKAH 1 (PALING PENTING): Rotate/ubah secret segera!
# Ubah API key, password, atau token yang bocor
# LANGKAH 2: Hapus dari history menggunakan git filter-repo
pip install git-filter-repo
git filter-repo --path .env --invert-paths
# LANGKAH 3: Force push (koordinasi dengan tim)
git push --force-with-lease
Penting: Menghapus dari history saja TIDAK cukup. Secret yang sudah pernah publik harus dianggap compromised dan harus diganti.
4. Branch Protection Rules
Di GitHub Settings > Branches > Branch protection rules:
- Require pull request reviews — minimal 1 reviewer sebelum merge
- Require status checks — CI harus pass sebelum merge
- Require signed commits — verifikasi identitas committer
- Restrict who can push — hanya maintainer yang bisa push ke main
5. CODEOWNERS
File CODEOWNERS menentukan siapa yang otomatis diminta review untuk file tertentu:
# .github/CODEOWNERS
*.js @frontend-team
*.css @frontend-team
*.py @backend-team
/docs/ @docs-team
/security/ @security-team
Demonstrasi: Audit Keamanan Repo
cd proyek-website # atau project kamu
# Audit 1: Cek file sensitif di history
echo "=== Cek file .env di history ==="
git log --all --full-history -- "*.env" "*.pem" "*.key"
# Audit 2: Cek secrets di kode
echo "=== Cek hardcoded secrets ==="
grep -rn "API_KEY\|SECRET\|PASSWORD\|TOKEN" \
--include="*.js" --include="*.py" --include="*.ts" \
--include="*.json" --exclude-dir=node_modules || echo "Tidak ditemukan"
# Audit 3: Cek .gitignore ada dan lengkap
echo "=== Cek .gitignore ==="
if [ -f .gitignore ]; then
echo ".gitignore ada"
grep -q ".env" .gitignore && echo "OK: .env di-ignore" || echo "WARNING: .env tidak di-ignore!"
grep -q "node_modules" .gitignore && echo "OK: node_modules di-ignore" || echo "WARNING: node_modules tidak di-ignore!"
else
echo "WARNING: .gitignore tidak ditemukan!"
fi
# Audit 4: Cek integritas repository
echo "=== Cek integritas repo ==="
git fsck --no-dangling
Latihan Praktik
Latihan: Audit Keamanan Repository
# Gunakan project yang sudah ada
cd proyek-website
# Langkah 1: Buat checklist keamanan
echo "=== SECURITY AUDIT CHECKLIST ==="
# Cek 1: .gitignore
echo "[1] Cek .gitignore..."
cat .gitignore 2>/dev/null || echo "TIDAK ADA .gitignore!"
# Cek 2: Secrets di kode
echo "[2] Cek secrets di kode..."
grep -rn "password\|secret\|api_key\|token" \
--include="*.js" --include="*.html" . || echo "BERSIH"
# Cek 3: File sensitif di staging
echo "[3] Cek file sensitif di history..."
git log --all --name-only --diff-filter=A | grep -E "\.(env|pem|key|p12)$" || echo "BERSIH"
# Cek 4: Repository integrity
echo "[4] Cek integritas repo..."
git fsck --no-dangling 2>&1 | tail -5
echo "=== AUDIT SELESAI ==="
Latihan: Setup Branch Protection
Untuk project di GitHub:
- Buka Settings > Branches
- Add branch protection rule untuk
main - Aktifkan: Require pull request reviews (1 reviewer)
- Aktifkan: Require status checks to pass
- Coba push langsung ke main — seharusnya ditolak
Preview: Capstone Project
Di 2 pertemuan terakhir (31-32), kamu akan mengerjakan proyek akhir yang menggabungkan semua materi dari pertemuan 1-30:
- Setup repository dengan best practices
- Feature development menggunakan GitHub Flow
- Git hooks untuk code quality
- CI/CD pipeline dengan GitHub Actions
- Pull Request, code review, dan merge
- Hotfix workflow
- Release dan tagging
Pastikan semua materi sebelumnya sudah dipahami sebelum memulai capstone!
Tugas Mandiri
- Lakukan audit keamanan pada minimal 2 repository kamu menggunakan langkah-langkah di atas
- Pastikan semua repo punya .gitignore yang lengkap
- Setup branch protection rules di 1 repo GitHub
- (Opsional) Buat file CODEOWNERS di salah satu repo
- Review semua materi dari pertemuan 1-30 sebagai persiapan capstone project
Quiz: Review Modul 3.4–3.5
Jawab 10 pertanyaan berikut untuk menguji pemahaman kamu.
Git submodule digunakan untuk...