pengertian git hooks

Siapa nih yang belum tahu sama sekali tentang Git hooks? Git hooks adalah skrip shell yang berjalan secara otomatis sebelum atau setelah Git menjalankan perintah penting, seperti Commit atau Push. Agar Hook berfungsi, kalian perlu memberikan izin eksekusi kepada sistem Unix. Bingung? Tenang, kami akan membahas Git hooks spesial untuk kalian. Simak sampai tuntas yuk Pengertian Git Hooks dan Cara Menggunakannya

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.

Pengertian Git

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

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. Namun, 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 ya, sistem harus memiliki izin eksekusi untuk menjalankan setiap hook tertentu.

Cara Menggunakan Git Hooks

Skrip hook disimpan di direktori .git/hooks/. Dengan fitur template directory dari Git, user bisa menginstalnya secara otomatis. Setiap kali kalian 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/, kalian akan menemukan sekumpulan sampel hooks, seperti commit-msg.sample, post-update.sample, dan pre-commit.sample, yang dapat membantu kalian memulai dengan lebih mudah.

Untuk menginstal hooks, kalian 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 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-rebase, post-rewrite, post-checkout, post-merge, pre-push, dan pre-auto-gc.

Berikut ini cara install git hook:

  1. Buka direktori .git/hooks/ milik repositori kalian.
  2. Cari sampel file hook yang ingin digunakan.
  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 digunakan untuk hook tersebut. Kalian bebas menggunakan bahasa skrip manapun, termasuk Python, Bash, atau shell.

6. Buka file hook di program code editor dan tentukan bahasa skrip pilihan kalian. Sertakan path interpreter di command.

Kalau ingin menggunakan Python:

#!/usr/bin python

Apabila ingin menggunakan Bash:

#!/bin/bash

Untuk menggunakan shell:

#!/bin/sh

7. 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 kalian 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 kalian.
  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, jika kalian 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 apapun yang telah di-push. Pre-hook ini dipanggil sebelum “git rebase” terjadi.

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

Skrip pre-commit akan berjalan sebelum kalian mengetik pesan commit, sementara pre-push berjalan sebelum konten baru diupload ke repositori jarak jauh. Keduanya memiliki fungsi yang berbeda dalam siklus project tapi kalian 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 kalian harus menempatkan skrip ke dalam direktori .git/hooks yang ada di server jarak jauh, bukan di direktori lokal.

Contoh Git Hook

Ada banyak kasus penggunaan untuk skrip hook. Okay, kita lihat contoh-contohnya yuk.

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.

Okay, sekarang udah tahu kan apa itu Git hooks serta cara menggunakan local hook dan server-side? Git hooks memang banyak membantu developer, programmer, dan engineer software untuk mengotomatiskan tindakan kustom setiap kali peristiwa tertentu terjadi di repositori Git. Trus ada beberapa contoh Git hooks dan cara menginstalnya juga. Semoga bermanfaat ya dan selamat belajar!

Oia, Jetorbit punya Paket Website Toko Online, lho. Kalian bisa menjual apa saja dengan toko online milik kalian sendiri! Mudah digunakan oleh siapa saja yang tentunya disertai dengan dukungan bantuan terbaik yang kalian dapatkan. Tenang, kami juga menyediakan produk VPS yang bisa kalian gunakan sesuai kebutuhan kalian tentunya.

Bermanfaatkah Artikel Ini?

Klik bintang 5 untuk rating!

Rata rata rating 0 / 5. Jumlah rate 0

Yuk Rate 5 Artikel Ini!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Bagikan:

Leave a Comment