Apa Itu Git Hooks? Bagaimana Cara Menggunakannya?

Git hooks adalah skrip shell yang berjalan secara otomatis sebelum atau setelah Git menjalankan perintah penting seperti Commit atau Push. Agar Hook berfungsi, Anda perlu memberikan izin eksekusi kepada sistem Unix.

Git telah menjadi elemen penting bagi developer, programmer, dan engineer software untuk memantau perubahan pada project agar kolaborasi mereka menjadi lebih efisien. Git hooks merupakan salah satu fitur bawaan Git, yang memungkinkan user mengotomatiskan tindakan kustom setiap kali terjadi peristiwa tertentu.

Di artikel ini, kami akan membahas lebih lanjut apa itu Git hooks dan cara menggunakannya, baik di sisi klien (client-side) maupun sisi server (server-side). Kami juga akan memberikan beberapa contoh Git hooks yang bisa diimplementasikan pada project Anda. Selamat membaca!

Pengertian Git

Sebelum membahas cara kerja dan penggunaan Git hooks, yuk cari tahu dulu apa itu Git.

Git adalah aplikasi version control open-source. Dengan Git, user bisa memantau dan melacak proses pengembangan software secara mendetail. Anda bisa membuat branch pengembangan, mencatat perubahan, dan sepenuhnya mengontrol versi file project Anda.

Git sangat populer di kalangan software developer dan sering digunakan pada berbagai project open-source.

Pengertian Git Hooks

Git hooks adalah skrip yang berjalan otomatis, sebelum atau setelah menjalankan command Git seperti Commit dan Push. Dengan skrip ini, user bisa menyesuaikan perilaku internal Git dengan mengotomatiskan tindakan tertentu pada tingkat program dan deployment.

Beberapa manfaat implementasi Git hooks adalah alur kerja integrasi yang berkelanjutan, mematuhi kebijakan commit, dan mencegah tindakan yang tidak sesuai dengan standar yang telah ditetapkan.

Git menyertakan contoh-contoh hooks di repositori Git tertentu. Tapi, website seperti GitHub atau GitLab tidak mengizinkan penggunaan Git hooks di instance pertamanya. Inilah sebabnya Git hooks biasanya digunakan di instance lokal atau pribadi.

Ingat, sistem harus memiliki izin eksekusi untuk menjalankan setiap hook tertentu.

Saran Artikel

Baca tutorial kami tentang cara menggunakan Git untuk membantu Anda mengembangkan project secara lebih efisien.

Cara Menggunakan Git Hooks

Skrip hook disimpan di direktori .git/hooks/. Dengan fitur template directory dari Git, user bisa menginstalnya secara otomatis. Setiap kali Anda menggunakan “git init” atau “git clone”, semua file dan direktori dalam template directory tersebut akan disalin ke repositori Git kosong yang baru.

Dalam .git/hooks/, Anda akan menemukan sekumpulan sampel hooks, seperti commit-msg.sample, post-update.sample, dan pre-commit.sample, yang bisa membantu Anda memulai dengan lebih mudah.

Untuk menginstal hooks, Anda perlu membuat file yang bisa dieksekusi (executable) dan menyimpannya dalam direktori .git/hooks/.

Cara Menggunakan Local Hooks

Local Hooks atau sisi klien (client-side) dipicu oleh peristiwa yang dijalankan di komputer pengguna. Contoh peristiwa ini di antaranya adalah saat Anda menjalankan atau menggabungkan project.

Secara umum, ada 3 jenis local hooks atau sisi klien, yaitu:

  • Committing-workflow hooks. Skrip hook ini berkaitan dengan proses comitting, yaitu pre-commit, prepare-commit-msg, commit-msg, dan post-commit.
  • Email workflow hooks. Skrip hook ini digunakan untuk project dengan alur kerja berbasis email yang menggunakan command “git am”. Skrip ini meliputi applypatch-msg, pre-applypatch, dan post-applypatch.
  • Lainnya. Skrip hook jenis ini di antaranya adalah pre-rebasepost-rewrite, post-checkout, post-merge, pre-push, dan pre-auto-gc.

Berikut cara install git hook:

  1. Buka direktori .git/hooks/ milik repositori Anda.
  2. Cari sampel file hook yang ingin Anda gunakan.
  3. Hapus kata “.sample” dari nama file hook. Misalnya, “pre-commit.sample” harus diubah menjadi “pre-commit”.
  4. Pastikan hook bisa dieksekusi dengan mengubah izinnya menggunakan command Git berikut:
    chmod +x [hook-name]
  5. Pilih bahasa skrip yang ingin Anda gunakan untuk hook tersebut. Anda bebas menggunakan bahasa skrip mana pun, termasuk Python, Bash, atau shell.
  6. Buka file hook di program code editor dan tentukan bahasa skrip pilihan Anda. Sertakan path interpreter di command.

Kalau ingin menggunakan Python:

#!/usr/bin python

Apabila ingin menggunakan Bash:

#!/bin/bash

Untuk menggunakan shell:

#!/bin/sh
  1. Tulis skrip hook dalam bahasa skrip yang sudah dipilih.

Ingat, agar hook berjalan dengan benar, nilai exit harus 0. Kalau ingin gagal, nilai exit harus 1. Apabila Anda ingin menambahkan beberapa ketentuan, semuanya harus disertakan dalam file yang sama.

Jangan lupa, skrip hook tidak langsung bisa digunakan dengan kontrol versi Git. Artinya, skrip tersebut tidak bisa dijalankan. Kalau direktori local hook dihapus, Git akan menghapus total semua hook dan versi sebelumnya dari project.

Solusinya yaitu dengan menambahkan symlink (symbolic link) ke repositori Git. Dengan begitu, skrip hook yang diaktifkan bisa dijalankan dalam aplikasi kontrol versi tersebut. Berikut cara melakukannya:

  1. Buat direktori Git baru bernama “hooks” di project utama Anda.
  2. Copy-paste file hook dari .git/hooks/ ke direktori “hooks” yang baru. Kalau masih berupa sampel, ubah menjadi executable dengan menghapus kata “.sample” dari nama file.
  3. Buka .git/hooks/ dan buat file kosong baru dengan nama yang sama.
  4. Buat symlink baru dengan memasukkan command berikut ke dalam Git:
ln -s -f ../hooks/[hook-name] .git/hooks/[hook-name]

Selain itu, kalau Anda ingin bypass hook aktif, tambahkan “–no-verify” ke command yang relevan. Misalnya, masukkan command berikut untuk melewati hook commit:

git commit --no-verify -m [commit message]

Menggunakan Pre-Hooks

Pre-hook dieksekusi sebelum peristiwa tertentu di repositori Git.

Hook pre-commit, misalnya, bisa digunakan untuk memberlakukan kebijakan commit dan mencegah commit yang tidak benar. Kalau hook exit dengan status selain nol (non-zero), Git akan membatalkannya.

Berikut beberapa contoh pre-hook lokal:

  • pre-applypatch. Mengecek kondisi working tree (direktori kerja) sebelum menjalankan perubahan. Pre-hook ini dipanggil setelah versi baru diterapkan, tapi sebelum perubahan dijalankan.
  • pre-commit. Menginspeksi konten commit itu sendiri, seperti gaya kode atau trailing whitespace. Pre-hook ini dipanggil sebelum pesan commit ditulis.
  • pre-merge-commit. Memanggil commit gabung otomatis yang diminta oleh “git merge”. Pre-hook ini dipanggil setelah penggabungan, tapi sebelum mendapatkan file pesan commit yang diajukan.
  • pre-push. Memvalidasi serangkaian update ref sebelum push terjadi. Pre-hook ini berjalan selama “git push” setelah remote ref diupdate, tapi sebelum perubahan baru ditransfer.
  • pre-rebase. Melarang pembuatan ulang base (rebase) commit Git apa pun yang telah di-push. Pre-hook ini dipanggil sebelum “git rebase” terjadi.

Beberapa hook ini mungkin terlihat mirip, misalnya skrip pre-push dan pre-commit. Oleh karena itu, penting untuk mengetahui hook mana yang nantinya sesuai untuk memenuhi kebutuhan Anda.

Skrip pre-commit akan berjalan sebelum Anda mengetik pesan commit, sementara pre-push berjalan sebelum konten baru diupload ke repositori jarak jauh. Keduanya memiliki fungsi yang berbeda dalam siklus project, tapi Anda bisa menggunakannya untuk mencegah commit dan push yang salah agar workflow semakin baik.

Menggunakan Post-Hooks

Git menjalankan post-hook setelah peristiwa tertentu terjadi di repositori.

Post-hook sering digunakan untuk mengotomatiskan respons terhadap tindakan lainnya. Misalnya, pengiriman email notifikasi saat commit Git baru ditambahkan.

Berikut beberapa contoh post-hook lokal:

  • post-applypatch. Memberi tahu grup atau patch author setelah patch diterapkan. Post-hook ini dipanggil setelah versi barunya diterapkan dan di-commit.
  • post-commit. Membuat notifikasi setelah seluruh proses commit selesai.
  • post-checkout. Memastikan kondisi, menampilkan perbedaan, dan menyiapkan direktori kerja yang tepat untuk lingkungan project. Post-hook ini berjalan setelah “git checkout” berhasil selesai.
  • post-merge. Menyimpan, menerapkan izin, dan memulihkan data tak terlacak lainnya di working tree. Post-hook ini dipanggil setelah command “git merge” berhasil dijalankan.
  • post-rewrite. Bisa digunakan dalam cara yang serupa dengan hook post-checkout dan post-merge. Post-hook ini dijalankan oleh command Git yang menggantikan commit, seperti “git rebase”.

Cara Menggunakan Server-Side Hook

Skrip hook sisi server (server-side) dieksekusi di repositori atau server remote yang menerima push dari komputer lokal. Skrip ini bisa berjalan sebelum ataupun setelah push server. Pre-hook sisi server, misalnya, bisa membatalkan push Git apa pun yang exit dengan pesan selain nol.

Berikut beberapa contoh server-side hook:

  • pre-receive. Mencantumkan referensi yang di-push ke repositori jarak jauh. Hook ini bisa digunakan untuk memastikan bahwa tidak ada referensi terbaru yang non-fast-forward, atau untuk melakukan kontrol akses bagi semua ref dan file yang diubah dengan Git push.
  • update. Memiliki tujuan yang serupa dengan pre-receive. Satu-satunya perbedaan adalah hook ini dijalankan satu kali untuk tiap branch, sedangkan pre-receive bisa berjalan sekali untuk beberapa branch.
  • post-receive. Mengirim email berisi daftar, memberi tahu server integrasi berkelanjutan, atau mengupdate sistem pelacakan tiket. Hook ini dijalankan di remote server selama push, setelah semua referensi diupdate.
  • post-update. Menerapkan notifikasi untuk referensi yang di-push. Cara kerjanya mirip dengan post-receive, bedanya hanyalah hook ini tidak menerima nilai ref lama ataupun baru. Hook ini berjalan setelah semua ref di-push ke remote server.

Langkah-langkah menginstal hook sisi server sama dengan langkah penginstalan hook sisi klien. Satu-satunya perbedaan adalah Anda harus menempatkan skrip ke dalam direktori .git/hooks yang ada di server jarak jauh, bukan di direktori lokal.

git hooks

Contoh Git Hook

Ada banyak kasus penggunaan untuk skrip hook. Yuk, lihat contoh-contohnya di bawah ini.

Menampilkan Informasi tentang Commit Action

Contoh ini menunjukkan informasi tindakan commit Git. Hook ini dipanggil setelah menerima pesan commit default dan sebelum editor pesan commit dibuka.

Buat file bernama prepare-commit-msg di folder .git/hooks/ repositori Git, lalu tulis skrip berikut:

#!/bin/sh

SOB=$(git config github.user)
grep -qs "^$SOB" "$1" || echo ". Cambio por @$SOB" >> "$1"

Setelah selesai, simpan dan tetapkan izin eksekusi ke file.:

:~$ chmod +x prepare-commit-msg

Dengan hook sederhana ini, kita akan langsung menerima informasi yang relevan terkait tindakan commit saat dibuat.

Membuat Dokumentasi Saat Perubahan Diupload

Pre-push hook memungkinkan pembuatan dokumentasi kode apabila kita memiliki generator kode. Setiap kali kita melakukan perubahan, dokumentasi akan dikompilasi secara otomatis.

Buat pre-push hook di direktori Git seperti tadi, kemudian tambahkan skrip berikut:

#!/bin/bash

doxygen Doxyfile
git add docs/
git commit -m "Update documentation ($(date +%F@%R))"

Simpan file dan tetapkan izin eksekusinya:

:~$ chmod +x pre-push

Menemukan dan Memperbaiki Trailing Whitespace di Commit

Pre-commit hook bisa dibuat tanpa perlu ribet. Buat file bernama pre-commit dan tambahkan skrip berikut ke dalamnya:

#!/bin/bash -l

.git/hooks/pre-commit-master-no-no
if [[ $? == 1 ]]
then
exit 1
fi

.git/hooks/pre-commit-debugger
.git/hooks/pre-commit-trailing-spaces
.git/hooks/pre-commit-images
.git/hooks/pre-commit-pair

Setelah itu, trailing whitespace akan ditemukan dan diperbaiki di semua commit.

Kesimpulan

Nah, Anda kini sudah tahu tentang apa itu Git hooks serta cara menggunakan local hook dan server-side. Git hooks telah banyak membantu developer, programmer, and engineer software untuk mengotomatiskan tindakan kustom setiap kali peristiwa tertentu terjadi di repositori Git.

Kemudian, Anda juga sudah mempelajari beberapa contoh Git hooks dan cara menginstalnya.

Semoga artikel ini bisa membantu Anda memanfaatkan Git sepenuhnya. Kalau ada pertanyaan atau tips, jangan ragu untuk menyampaikannya melalui kolom komentar di bawah ini, ya.

Author
Penulis

Faradilla A.

Faradilla, yang lebih akrab disapa Ninda, adalah Content Marketing Specialist di Hostinger. Ia suka mengikuti tren teknologi, digital marketing, dan belajar bahasa. Melalui tutorial Hostinger ini, Ninda ingin berbagi informasi dan membantu pembaca menyelesaikan masalah yang dialami. Kenali Ninda lebih dekat di LinkedIn.