Claude Code git hooks untuk commit lebih aman dan review lebih cepat
Claude Code git hooks dapat menghentikan kebocoran rahasia, menegakkan formatting, menjalankan tes yang tepat, dan menulis ringkasan commit singkat untuk mempercepat review.

Mengapa automasi saat commit penting
Sebagian besar masalah review bukan berasal dari kode yang “sulit”. Melainkan dari kesalahan yang bisa dihindari yang masuk ke commit: flag debug yang tertinggal, file yang tidak terformat sehingga membuat diff berisik, tes yang lupa diperbarui, atau rahasia yang tersalin ke konfigurasi. Masing‑masing kecil, tapi bersama‑sama mengubah review yang seharusnya bersih menjadi bolak‑balik yang lambat.
Automasi saat commit adalah tempat termudah untuk menghentikan itu. Saat pemeriksaan berjalan tepat sebelum commit dibuat, mereka menangkap masalah saat perubahan masih segar di kepala Anda. Memperbaiki kesalahan butuh beberapa detik karena Anda sudah dalam konteks pekerjaan. Bandingkan dengan menemukannya dua hari kemudian di pull request, setelah lebih banyak commit menumpuk dan reviewer harus bertanya apa yang terjadi.
Git hooks praktis karena berjalan secara lokal, tanpa menunggu CI. Tapi mereka bukan sulap. Hook bisa dilewati, salah konfigurasi, atau tidak konsisten antar mesin jika tim Anda tidak menstandardkannya. Mereka juga tidak bisa menjamin kualitas sendirian. Anggaplah mereka sebagai pembatas keselamatan, bukan gerbang mutlak.
Tempat hooks paling membantu adalah mencegah “biaya review”, umpan balik berulang bernilai rendah yang terus muncul. Contoh umum termasuk string sensitif yang mirip token, noise formatting dan lint, pemeriksaan “apakah Anda menjalankan tes yang tepat?”, dan ringkasan konteks kecil yang membantu reviewer memahami maksud.
Di sinilah Claude Code git hooks berguna: mereka bisa melakukan pekerjaan verifikasi yang membosankan dan menambahkan sedikit konteks yang mudah dibaca oleh manusia tepat saat Anda commit.
Menetapkan ekspektasi penting. Jaga supaya hook lokal cepat dan dapat diprediksi agar orang tidak membencinya. Pemeriksaan cepat cocok dijalankan di laptop; pemeriksaan lambat ditempatkan nanti. Pembagian yang baik adalah detik‑detik di saat commit dan menit di CI. Jika sebuah hook rutin memakan waktu hingga orang memilih “skip”, ia berhenti melindungi repo Anda.
Contoh sederhana: Anda mengubah satu modul dan merombak beberapa fungsi. Tanpa automasi, reviewer melihat 400 baris yang dipindah, tak ada tes disebutkan, dan harus menanyakan hal‑hal dasar. Dengan pemeriksaan saat commit, commit sudah terformat, set tes relevan dijalankan, dan pesan commit berisi ringkasan singkat. Review dimulai pada tempat yang semestinya: desain, bukan pembersihan.
Apa yang ditambahkan Claude Code ke git hooks
Hook bagus untuk pemeriksaan sederhana, tapi biasanya hanya sampai aturan ya-tidak: “apakah file terformat?” atau “apakah Anda menjalankan linter?”. Claude Code bisa menambahkan lapisan penilaian ringan dengan membaca diff staged Anda dan beberapa berkas terkait, lalu membuat keputusan yang lebih mirip cara manusia mereview perubahan.
Dengan Claude Code git hooks, hook dapat melihat apa yang benar‑benar Anda ubah, bukan hanya apa yang ada di repo. Itu membuat automasi lebih selektif. Ia bisa memfokuskan pada modul yang disentuh, berkas konfigurasi yang diedit, dan variabel lingkungan baru, alih‑alih memperlakukan setiap commit seperti build penuh.
Tugas praktis di mana “baca diff dan pikir” memberi manfaat:
- Menandai kemungkinan rahasia (kunci API, token, kunci privat), bahkan saat sedikit disamarkan atau terpotong antar baris.
- Menegakkan formatting dengan konteks, misalnya hanya menjalankan formatter pada berkas staged dan memberi peringatan bila formatter akan menyebabkan churn besar yang tidak terkait.
- Menyarankan atau mewajibkan tes berdasarkan apa yang berubah (mis. “Anda menyentuh logika pembayaran, jalankan tes unit ini”) daripada “jalankan semuanya”.
- Menghasilkan ringkasan singkat untuk reviewer dari diff: apa yang berubah, mengapa, area berisiko, dan apa yang harus diverifikasi.
Batasan penting karena hook lambat jadi hook yang dilewati. Tetapkan tujuan kecil: tambahkan pembatas yang menangkap kesalahan umum lebih awal, bukan sistem CI kedua pada setiap commit.
Kecepatan dan keandalan terlebih dahulu
Aturan bagus: jika tidak bisa selesai dalam beberapa detik, kemungkinan besar tempatnya di CI atau pre-push. Banyak tim menjalankan pemeriksaan lokal cepat saat commit dan menyisakan suite tes yang lebih berat untuk nanti.
Rencanakan mode gagal. Jika panggilan model timeout, tentukan apakah akan memblokir commit atau kembali ke pemeriksaan yang lebih sederhana. Fallback menjaga alur kerja dapat diprediksi dan mencegah orang terbiasa menonaktifkan hook.
Privasi dan offline vs online
Beberapa setup memanggil model hosted; yang lain berjalan di lingkungan lebih terisolasi. Tentukan kode apa yang boleh meninggalkan mesin developer (jika ada), dan batasi apa yang Anda kirim. Diff staged plus beberapa berkas referensi biasanya cukup.
Jika Anda bekerja dengan repo sensitif, jelaskan di mana analisis berjalan dan apa yang dicatat. Contoh konkret: jika sebuah commit menambah nilai konfigurasi baru seperti STRIPE_SECRET=..., hook bisa menghentikan commit, menjelaskan apa yang berisiko, dan menyarankan memindahkannya ke secret manager atau file env lokal sebelum sampai di remote.
Pilih hook yang tepat dan jaga kecepatannya
Git hooks berguna hanya jika orang tetap menggunakannya dan tidak takut commit. Triknya memilih hook yang tepat untuk tugas yang tepat dan menjaga apa pun yang lambat keluar dari jalur utama.
Peta sederhana di mana pemeriksaan biasanya cocok:
- pre-commit: pemeriksaan cepat lokal yang memblokir masalah jelas (formatting, pemindaian rahasia, lint cepat)
- commit-msg: pemeriksaan yang hanya butuh pesan (ID tiket, panjang, format konvensional)
- pre-push: pekerjaan lebih berat yang masih layak dicegah sebelum masuk ke repo bersama (tes yang lebih lambat, pemeriksaan tipe, build)
Saat menambahkan Claude Code git hooks, perlakukan mereka seperti reviewer yang membantu hadir seketika, bukan bottleneck. Taruh apa pun yang membutuhkan panggilan jaringan, suite tes penuh, atau analisis panjang ke pre-push atau CI, bukan pre-commit.
Cara praktis memutuskan apa yang dijalankan di mana adalah mengurutkan pemeriksaan berdasarkan kecepatan dan dampak. Jika menangkap isu berisiko tinggi (seperti kunci bocor) dan bisa berjalan dalam satu atau dua detik, tempatnya di pre-commit. Jika butuh 30–90 detik, pindahkan ke pre-push atau jalankan hanya saat berkas tertentu berubah.
Tim juga perlu sikap jelas soal penegakan. Untuk repo solo, hook opt-in bisa cukup. Untuk repo tim, umum menegakkan dasar (rahasia, formatting, aturan pesan commit) dan menjaga pemeriksaan berat bersifat advisori lokal, sementara CI tetap gerbang final.
Output hook lebih penting dari perkiraan. Hook yang gagal harus mengatakan apa yang terjadi dan apa yang harus dilakukan selanjutnya. Jaga pesan singkat dan spesifik. Tampilkan file dan baris yang tepat bila memungkinkan, berikan satu perintah perbaikan jelas, jelaskan cara melewati hanya untuk keadaan darurat (dan kapan tidak), dan hindari log besar kecuali pengguna meminta “verbose.”
Contoh: jika Anda mengekspor proyek dari Koder.ai dan mulai commit lokal, pre-commit cepat dapat menangkap token API yang disalin segera, sementara pre-push menjalankan aturan lebih lambat seperti “hanya tes untuk modul yang berubah” sebelum orang lain melihat branch.
Blokir rahasia sebelum ter-commit
Rahasia adalah apa pun yang memungkinkan seseorang bertindak sebagai Anda atau mengakses sistem privat. Pikirkan token API, secret client OAuth, kunci cloud, password database, URL webhook privat, kunci signing, dan bahkan kredensial tes “sementara”. Satu commit tidak sengaja bisa berakhir di fork, log CI, atau diff yang ditempel, dan kemudian tidak lagi bersifat sementara.
Kemenangan termudah adalah memindai hanya apa yang akan Anda commit. Hook harus memeriksa perubahan staged (index), bukan seluruh repo. Itu membuatnya cepat dan menghindari noise dari berkas lama yang tidak Anda sentuh. Juga membuat umpan balik terasa adil: “commit ini mengandung masalah” daripada “repo Anda pernah memiliki masalah”.
Hal umum yang harus ditandai dini termasuk token entropi tinggi (string panjang yang tampak acak), format kunci yang dikenal (kunci AWS, token GitHub, JWT), pola seperti password=... atau api_key: ... di konfigurasi, URL privat dengan kredensial tertanam, dan berkas .env atau konfigurasi produksi yang disalin.
False positive terjadi, terutama dengan data tes, hash, atau dokumen contoh. Bangun allowlist sehingga orang bisa melanjutkan tanpa menonaktifkan seluruh pemeriksaan. Jaga allowlist sempit: path file pasti untuk fixtures, atau penanda eksplisit seperti “dummy” atau “example” yang dikenali detektor Anda.
Saat rahasia ditemukan, gagalkan commit dengan pesan yang memberitahu langkah selanjutnya. Claude Code git hooks dapat membuatnya lebih ramah dengan menghasilkan penjelasan singkat berdasarkan diff, tetapi intinya adalah tindakan aman yang jelas:
ERROR: Possible secret detected in staged file: config/app.yaml (line 12)
Reason: looks like an API token
Next steps:
1) Remove it from the change or move it to env vars
2) Rotate the token (assume it is compromised)
3) Re-stage and retry commit
If this is a false positive, add a narrow allowlist rule in .secrets-allowlist
Contoh konkret: seseorang memperbarui konfigurasi backend dan menambahkan TEMP_API_KEY agar fitur bekerja di dev. Hook menghentikan commit, menyarankan memindahkannya ke variabel lingkungan, dan mengingatkan untuk merotasi jika itu nyata. Gangguan kecil yang mencegah pembersihan besar kemudian.
Tegakkan formatting tanpa memperlambat
Pertengkaran soal formatting menghabiskan waktu reviewer, tapi hook lambat membuat orang cepat menonaktifkannya. Titik manisnya adalah aturan sederhana, satu tool per bahasa, dan hanya menyentuh apa yang akan di-commit.
Pilih satu formatter per bahasa dan jadikan sumber kebenaran. Dua formatter yang berbeda (atau formatter plus linter yang juga menulis ulang) akan membuat diff berisik dan churn tak berujung. Jaga agar tetap membosankan: satu formatter JS/TS, satu Go, satu Dart. Pastikan semua orang menjalankan versi yang sama supaya output hook konsisten antar mesin.
Kemenangan kecepatan terbesar adalah memformat hanya berkas staged. Memformat seluruh repo setiap commit adalah alasan utama tim mengeluh tentang pre-commit. Pendekatan staged-only juga menjaga diff fokus pada yang Anda ubah, persis yang reviewer inginkan.
Set pilihan praktis untuk menjaga commit cepat:
- Jalankan formatting pada berkas staged saja.
- Gunakan auto-fix untuk perubahan aman (spacing, quotes, urutan import).
- Gagal cepat saat perlu keputusan manusia (mis. aturan yang bisa mengubah perilaku).
- Tahan output formatter tetap sunyi kecuali ada perubahan.
- Cache bila memungkinkan, tapi jangan mengorbankan kebenaran.
Auto-fix vs gagal adalah preferensi tim, tapi pendekatan campuran bekerja baik. Auto-fix bagus untuk edit mekanis karena menghindari loop “commit, gagal, jalankan ulang, commit lagi”. Gagal bisa lebih baik saat Anda ingin orang melihat masalah dan memilih arah. Jika gagal, cetak satu instruksi yang bisa diikuti siapa pun dalam 10 detik.
Standarkan hal kecil yang menyebabkan noise lintas platform. Line ending dan trailing whitespace adalah pelaku biasa, terutama saat orang berganti antara Windows, macOS, dan CI.
Kebijakan sederhana yang jarang menyakitkan:
- Tegakkan LF sebagai line ending di repo.
- Hapus trailing whitespace pada baris yang dimodifikasi.
- Pastikan file diakhiri newline.
- Lewati formatting untuk file yang digenerate dan direktori vendor.
Di sinilah Claude Code git hooks membantu sebagai pengikat: mendeteksi berkas staged mana yang butuh formatter mana, menjalankannya dalam urutan benar, dan menjelaskan kegagalan dalam bahasa yang jelas. Misalnya, jika seseorang men-stage berkas Go dan TS, hook bisa memformat masing‑masing dengan tool yang tepat, re-stage hasilnya, lalu mencetak catatan singkat seperti “2 file terformat ulang, tanpa perubahan perilaku”. Reviewer melihat diff lebih bersih, dan pengembang tak merasa dihukum karena sering commit.
Wajibkan tes untuk apa yang Anda ubah
Aturan sederhana membuat commit lebih aman tanpa menyakitkan: jalankan hanya tes yang cocok dengan apa yang Anda staged. Ketika hook melihat diff staged (bukan working tree Anda), ia menghindari alarm palsu dari file yang setengah jadi.
Mulai dengan mendeteksi area yang disentuh. Banyak repo sudah punya struktur alami: paket, layanan, aplikasi, atau modul. Hook bisa membaca git diff --cached --name-only, lalu memetakan path tersebut ke sekumpulan perintah tes kecil.
Beberapa aturan pemetaan yang mudah dipahami saat Anda kembali nanti:
web/ataufrontend/-> jalankannpm test(atau perintah target terkecil yang Anda punya)api/atauserver/-> jalankan unit test backend (skip integrasi secara default)mobile/-> jalankan tes widget/unit cepat, bukan suite perangkat penuhdb/ataumigrations/-> jalankan migration linting plus pemeriksaan skema kecilshared/-> jalankan tes package shared, plus consumer cepat yang relevan
Dengan Claude Code git hooks, Anda bisa melangkah lebih jauh: minta Claude melihat nama berkas staged dan mengusulkan set tes minimal, lalu hook menjalankan perintah tersebut. Tetap buat aturan akhir berbasis rule sehingga tim bisa memprediksi apa yang akan terjadi.
Bagi beban kerja antara commit dan push. Commit harus tetap cepat agar orang tidak mulai melewati hook. Pola praktis:
- Saat commit: jalankan set selektif cepat (lint + unit test untuk modul yang disentuh)
- Saat push: jalankan set lebih luas (integrasi, smoke e2e, tes lintas modul)
- Di CI: jalankan suite lengkap dan terapkan gate coverage
Tes flaky dan lambat butuh kebijakan eksplisit, atau hook menjadi noise. Sepakati sebagai tim apa yang memblokir commit vs apa yang hanya memberi peringatan. Pendekatan yang bisa diterima adalah memblokir pada kegagalan jelas (formatting, unit test yang biasanya stabil), memperingatkan untuk tes yang diketahui flaky dengan pesan singkat, dan memindahkan suite lambat ke push/CI. Jika tes flaky, perlakukan itu sebagai bug: lacak, perbaiki, dan hapus mode peringatan begitu stabil lagi.
Hasilkan ringkasan reviewer singkat saat commit
Diff bagus tidak selalu mudah di-review. Ringkasan singkat saat commit bisa mengubah pembacaan 10 menit menjadi pemeriksaan 2 menit, terutama saat perubahan menyentuh banyak file atau termasuk refactor.
Idenya sederhana: ketika Anda menjalankan git commit, hook meminta Claude Code membaca diff staged dan menghasilkan catatan 3–6 baris yang menjawab pertanyaan yang selalu ada di benak reviewer: apa yang berubah, mengapa, seberapa berisiko, dan bagaimana diuji.
Template ringkasan sederhana
Jaga output singkat dan konsisten supaya reviewer belajar mempercayainya:
- Apa: satu kalimat tentang perubahan utama (bukan daftar file)
- Mengapa: masalah pengguna atau bug yang diperbaiki
- Risiko: rendah, sedang, atau tinggi dengan satu alasan
- Pengujian: apa yang Anda jalankan (atau tulis “tidak dijalankan”)
- Catatan: migrasi, flag, langkah rollout, atau hal penting untuk review
Anda bisa memasukkannya langsung ke pesan commit (mis. sebagai footer pendek), atau menyimpannya ke file yang tim Anda salin ke deskripsi pull request. Pesan commit bekerja baik bila Anda ingin konteks ikut berpindah bersama perubahan. File terpisah lebih cocok bila tim lebih suka subject commit yang bersih dan konvensional.
Jangan bocorkan rahasia di ringkasan
Alat ringkasan harus lebih ketat daripada reviewer. Sebelum mengirim konten diff ke model, saring baris yang cocok pola seperti kunci API, kunci privat, token, nilai .env, dan kredensial. Juga saring header dan cookie umum jika repo Anda menyertakan tangkapan lalu lintas HTTP. Ketika hook mendeteksi pola sensitif, ia bisa meredaksi baris atau fallback ke ringkasan generik seperti “perubahan terkait kredensial disunting”.
Contoh: Anda memperbarui endpoint billing dan menyentuh tiga file. Diff staged berisik karena rename, tetapi ringkasan mengatakan: “Menambahkan penanganan idempoten untuk pembuatan charge guna mencegah penagihan ganda. Alasan: retry menyebabkan duplikat charge. Risiko: sedang (jalur pembayaran). Pengujian: unit test untuk service billing, replay request manual.” Itu persis yang reviewer butuhkan tanpa membaca setiap baris.
Contoh alur kerja: satu commit, lebih sedikit kejutan
Anda memperbaiki bug kecil dan mengubah konfigurasi dalam commit yang sama. Bug adalah satu baris di billing/tax.go. Perubahan konfigurasi memperbarui config/staging.yaml untuk menunjuk endpoint baru.
Anda menjalankan git commit -am "Fix tax rounding". Claude Code git hooks aktif dan melakukan serangkaian pemeriksaan cepat, dalam urutan yang dapat diprediksi.
Pertama, pemindaian rahasia melihat apa yang berubah, bukan seluruh repo. Ia menandai bahwa konfigurasi staging berisi sesuatu yang tampak seperti API key.
ERROR: Possible secret detected in config/staging.yaml:12
Pattern: api_key=sk_live_...
Fix: remove the key and use an env var reference (e.g., API_KEY)
Override: set ALLOW_SECRETS=1 (not recommended)
Anda mengganti nilai itu dengan referensi variabel lingkungan, lalu commit lagi.
Selanjutnya, formatting hanya berjalan di mana perlu. Jika file Go Anda belum terformat, ia gagal dengan petunjuk singkat seperti “run gofmt on billing/tax.go”. Anda menjalankan formatter, dan hook lulus dalam hitungan detik.
Kemudian gate tes menjalankan set yang ditargetkan. Karena Anda menyentuh billing/, ia menjalankan hanya tes unit billing (bukan suite penuh). Jika satu tes gagal, hook menampilkan perintah tepat untuk mereproduksi secara lokal. Anda memperbaiki kasus pembulatan dan menjalankan ulang tes yang sama.
Akhirnya, hook menghasilkan ringkasan reviewer dari diff. Singkat dan spesifik, seperti:
- What changed: Fix rounding in tax calculation for values ending in .005
- Config: staging now reads API key from env var
- Tests: billing unit tests passed
- Risk: affects billing totals, but limited to tax rounding path
Apa yang reviewer lihat adalah commit yang sudah bersih: tidak ada rahasia bocor, formatting konsisten, dan tes yang sesuai dengan perubahan. Mereka juga mendapat ringkasan siap pakai, sehingga bisa fokus pada logika daripada mencari intent.
Kesalahan umum dan cara menghindarinya
Cara tercepat membuat hook gagal adalah menjadikannya menyakitkan. Jika sebuah hook memakan waktu cukup lama untuk mengganggu alur seseorang, mereka akan melewatinya dengan --no-verify atau menghapusnya. Jaga apa pun yang berat keluar dari pre-commit dan jalankan itu di CI atau sesuai permintaan.
Aturan praktis: pre-commit harus terasa seperti pemeriksaan typo, bukan suite tes. Jika Anda ingin pemeriksaan lebih cerdas dari Claude Code git hooks, gunakan untuk memutuskan apa yang dijalankan, bukan untuk menjalankan semuanya.
1) Hook terlalu lambat
Buat hook cepat secara default dan ketat hanya saat diperlukan. Misalnya, jalankan format cepat + pemindaian rahasia pada setiap commit, tetapi jalankan tes hanya untuk modul yang terdampak.
Anggaran kecepatan sederhana yang bekerja:
pre-commit: total 1 hingga 5 detikcommit-msg: di bawah 1 detik- Apa pun yang lebih lama: pindahkan ke
pre-pushatau CI
2) Output AI tanpa aturan jelas
AI bagus untuk saran, bukan kebijakan. Jika Anda meminta AI “mereview diff” tanpa aturan, hasilnya beda tiap kali. Definisikan apa yang harus dilakukan hook (dan apa yang tidak boleh dilakukan). Misalnya: ia boleh menghasilkan ringkasan reviewer, tapi tidak boleh menulis ulang kode kecuali formatter sudah menghasilkan perubahan deterministik.
3) Kebingungan staged vs unstaged
Banyak hook keliru memindai working tree Anda, lalu menggagalkan commit karena perubahan yang tidak Anda stage. Itu terasa tidak adil.
Hindari dengan selalu menggunakan konten staged sebagai input. Tes yang baik: edit file, stage separuh perubahan, dan verifikasi hook hanya melaporkan apa yang distage.
4) Terlalu banyak false positive
Jika setiap commit memicu peringatan, peringatan menjadi noise. Tuning pola, tambahkan allowlist untuk string aman yang diketahui, dan turunkan temuan “mungkin” menjadi peringatan dengan perbaikan jelas.
Contoh konkret: jika scanner rahasia menandai kunci tes di fixtures/, tambahkan aturan untuk mengabaikan folder itu, tetapi tetap memblokir kunci nyata di file konfigurasi aplikasi.
Daftar periksa cepat dan langkah selanjutnya
Jika Anda ingin Claude Code git hooks membantu tanpa mengganggu tim, tujuannya sederhana: tangkap masalah nyata lebih awal, tetap diam saat semuanya normal, dan jaga loop commit cepat.
Daftar periksa praktis yang cocok untuk mayoritas repo:
- Jaga pre-commit di bawah beberapa detik untuk sebagian besar perubahan. Jika melambat, orang akan melewatinya.
- Hanya pindai, format, dan lint berkas staged. Yang lain tempatnya di pre-push atau CI.
- Blokir rahasia jelas (API keys, kunci privat, token). Untuk kasus “mungkin”, beri peringatan dan biarkan developer konfirmasi.
- Mewajibkan tes yang ditargetkan pada commit untuk modul yang disentuh, lalu jalankan tes yang lebih luas saat push atau CI.
- Tambahkan ringkasan commit singkat dan konsisten sehingga reviewer tahu apa yang berubah dan apa yang diprioritaskan.
Detail kecil yang berbuah: buat ringkasan reviewer tampak sama setiap kali. Template sederhana cukup, dan itu melatih reviewer untuk memindainya dengan cepat.
Review summary:
- What changed: <1-2 bullets>
- Risky areas: <files/modules>
- Tests run: <command or “not run + why”>
Langkah selanjutnya agar mudah diadopsi:
- Prototype alur di proyek sandbox dulu, lalu salin ke repo nyata setelah terasa pas.
- Mulai dengan mode “hanya peringatan” selama seminggu, ukur false positive, lalu alihkan pemeriksaan paling andal ke mode “blok”.
- Tambahkan escape hatch untuk keadaan darurat (mis. mengizinkan melewati hook dengan alasan jelas di pesan commit), dan catat saat itu terjadi.
- Pindahkan apa pun yang berat (suite tes penuh, pemindaian rahasia mendalam, audit dependensi) ke pre-push atau CI supaya commit tetap cepat.
Jika Anda suka membangun tooling dengan pendekatan chat-first, Koder.ai (koder.ai) bisa berguna untuk menghasilkan skrip pembantu kecil di sekitar hooks Anda dan beriterasi aman dengan snapshot dan rollback sebelum mengekspor kode sumber ke repo.
Pertanyaan umum
Pemeriksaan terbaik apa yang dijalankan saat commit?
Mulailah dengan pelanggar berulang yang menghabiskan waktu reviewer:
- Pemindaian rahasia pada perubahan staged
- Formatting hanya untuk berkas staged
- Lint cepat (atau pemeriksaan tipe) untuk berkas yang disentuh
- Ringkasan reviewer singkat yang dihasilkan dari diff
Simpan apa pun yang lambat (seluruh suite tes, analisis statis mendalam) untuk pre-push atau CI.
Hook git mana yang harus saya gunakan untuk apa—pre-commit, commit-msg, atau pre-push?
Default yang baik adalah:
pre-commituntuk pemeriksaan cepat yang melihat perubahan staged (rahasia, formatting, lint cepat, tes unit selektif)commit-msguntuk aturan pesan commit (panjang, format, ID tiket)pre-pushuntuk pemeriksaan lokal yang lebih lambat (tes lebih luas, build)
Jika sebuah pemeriksaan secara rutin memakan waktu lebih dari beberapa detik, pindahkan ke tahap selanjutnya.
Jika hook bisa dilewati, apakah masih layak dipakai?
Anggap hook waktu-commit sebagai pembatas keselamatan, bukan satu-satunya penegakan.
- Gunakan hook lokal untuk menangkap kesalahan lebih awal dan mengurangi kebisingan review.
- Tetap tegakkan aturan "harus lolos" di CI, karena hook bisa dilewati atau salah konfigurasi.
Kebijakan praktis: hook membantu developer; CI melindungi branch utama.
Bagaimana cara memindai rahasia tanpa memperlambat commit?
Pindai diff yang staged (index), bukan seluruh repo.
- Lebih cepat.
- Lebih adil (menandai apa yang akan Anda commit, bukan file lama).
- Mengurangi noise dari riwayat yang tidak terkait.
Jika Anda membutuhkan pemindaian seluruh repo, jalankan itu terjadwal atau di CI.
Apa yang harus dilakukan tentang false positive dari deteksi rahasia?
Blokir saat kecocokan berisiko-tinggi (format kunci nyata, blok kunci privat, nilai password= yang jelas). Beri peringatan saat ambigu.
Tambahkan allowlist sempit untuk kasus aman yang diketahui, seperti:
- Path fixtures tertentu
- String contoh yang jelas (mis.
DUMMY_KEY)
Jika orang melihat alarm palsu terus-menerus, mereka akan menonaktifkan hook.
Bagaimana cara menegakkan formatting tanpa mengganggu tim?
Format hanya berkas staged, dan gunakan satu formatter per bahasa.
Default praktis:
- Auto-fix perubahan format yang aman, lalu re-stage
- Gagal dengan satu perintah jelas saat diperlukan keputusan manusia
- Lewati direktori generated/vendor
Ini menjaga diff tetap bersih tanpa mengubah setiap commit menjadi penulisan ulang panjang.
Bagaimana cara “mewajibkan tes untuk apa yang berubah” tanpa menjalankan semuanya?
Peta path yang disentuh ke sekumpulan perintah tes cepat.
Contoh pendekatan:
- Deteksi area yang diubah via
git diff --cached --name-only - Jalankan hanya unit test untuk modul tersebut
- Tinggalkan integrasi/e2e untuk
pre-pushatau CI
Ini menjaga commit cepat sambil menangkap kegagalan paling umum lebih awal.
Apa yang harus disertakan dalam ringkasan reviewer saat commit?
Jaga ringkasan singkat dan konsisten (3–6 baris). Template sederhana:
- Apa yang berubah
- Mengapa
- Risiko (rendah/sedang/tinggi + satu alasan)
- Pengujian (apa yang dijalankan, atau “tidak dijalankan”)
Anda bisa menambahkannya ke pesan commit atau menyimpannya sebagai keluaran teks untuk deskripsi PR.
Bagaimana cara mencegah bocornya kode sensitif atau rahasia saat memakai AI di hook?
Redaksi sebelum mengirim apa pun ke model, dan bersikap konservatif.
- Hapus baris yang mirip token, rahasia, nilai
.env, kunci privat, cookie, atau header auth - Jika pola sensitif ada, gunakan ringkasan generik (mis. “baris terkait kredensial disunting”) sebagai fallback
- Kirim hanya diff staged plus konteks referensi minimal
Lebih aman untuk “berbagi lebih sedikit”, terutama di repo privat.
Bagaimana cara mencegah hook menjadi flaky atau memperlambat commit?
Buat hook yang dapat diprediksi dan cepat:
- Tetapkan anggaran waktu (mis. 1–5 detik untuk
pre-commit) - Tambahkan pesan error yang jelas: file, baris, dan satu perintah perbaikan
- Tentukan kebijakan kegagalan untuk timeout (blok, peringatan, atau fallback)
- Catat "skip" secara hemat agar orang tidak menyembunyikannya
Jika hook terasa flaky atau lambat, developer akan memakai --no-verify.