Git Hooks

Diterbitkan: 2022-07-02

Git adalah sistem kontrol versi yang kuat yang hampir tidak pernah kami gores permukaannya pada beberapa posting terakhir kami. Hari ini, kita akan melihat kekuatan otomatisasi yang dapat diberikan Git kepada Anda dengan Git Hooks.

Setiap repositori memiliki kait bawaan saat Anda menggunakan perintah git init . Ketika repositori diinisialisasi, Anda mendapatkan direktori .git tersembunyi dan di dalamnya ada direktori bernama hooks yang akan berisi semua hook Anda. Buka repositori git apa pun yang Anda miliki dan gunakan ls -a untuk melihat direktori tersembunyi, lalu buka di editor kode favorit Anda.

Untuk memulai, Anda akan melihat banyak file dengan ekstensi file .sample . Ini persis seperti yang mereka katakan, contoh skrip yang dapat Anda gunakan dalam proyek Anda. File-file tersebut dinamai sesuai dengan hook yang mereka jalankan. Jadi post-commit.sample berjalan di hook post-commit .

Anda dapat menggunakan hampir semua bahasa untuk menulis sebuah kail. File diurai menurut notasi Shebang di bagian atas file. Jika Anda ingin menggunakan simpul, Anda akan menggunakan #! /usr/bindi/env node #! /usr/bindi/env node dan file Anda akan diuraikan sebagai file node.

Sebelum kita menyelami apa yang dapat Anda lakukan dengan git hooks, mari kita lihat beberapa hook yang tersedia untuk Anda.

Jenis Kait Git

Komit Kait Alur Kerja

pre-commit dijalankan bahkan sebelum Anda memasukkan pesan komit Anda dan itu dapat dilewati dengan git commit --no-verify .

prepare-commit-msg dapat digunakan untuk mengedit pesan default yang Anda lihat di pesan komit Anda. Gunakan untuk memberikan instruksi kepada pengembang tentang jenis pesan komit apa yang harus mereka tinggalkan. Ini juga dapat digunakan untuk mengotomatiskan konten tempat pesan dibuat secara otomatis untuk Anda, seperti menggabungkan atau menambahkan nomor masalah ke pesan komit Anda secara otomatis.

commit-msg dapat digunakan untuk memvalidasi pesan komit untuk proyek Anda. Mungkin Anda tidak ingin siapa pun dapat memasukkan pesan komit yang hanya mengatakan "berurusan dengan ruang putih". Anda dapat menggunakan kait ini untuk mendeteksi keberadaan kata-kata spasi dan kemudian keluar dan memberikan peringatan kepada pengguna bahwa mereka perlu memiliki pesan komit yang lebih baik.

post-commit berjalan setelah semua kait komit di atas. Ini paling berguna untuk pemberitahuan bahwa komit telah dibuat.

Kait Klien

post-checkout berjalan setelah Anda menjalankan perintah git checkout yang berhasil. Jika Anda memiliki sekumpulan file besar yang digunakan di situs tetapi tidak menginginkannya dalam kontrol sumber, Anda dapat menggunakan perintah ini untuk memindahkan file untuk Anda.

pre-push berjalan selama perintah git push sebelum objek apa pun ditransfer ke repositori jarak jauh.

Kait Server

pre-receive berjalan ketika klien telah mendorong kode ke repositori jarak jauh. Ini dapat digunakan untuk memeriksa kode yang didorong untuk memastikan bahwa kode tersebut memenuhi kriteria proyek Anda sebelum Anda menerimanya.

post-receive berjalan setelah repositori jarak jauh Anda menerima pembaruan. Ini dapat digunakan untuk memanggil kait web yang memicu proses penerapan atau memberi tahu ruang obrolan bahwa komit telah diterima dan siap untuk ditinjau.

Banyak dari kait di atas dapat diatur untuk berjalan hanya pada cabang tertentu. Itu mungkin berarti ketika Anda menggunakan kait post-receive hanya ketika seseorang telah mendorong kode ke cabang utama yang seharusnya siap untuk digunakan. Daftar pengembang dapat diberi tahu untuk meninjau kode dan kemudian menerapkannya. Dengan cara ini Anda akan selalu memiliki 2 pasang mata pada penerapan yang dapat berarti menangkap kesalahan yang dapat dengan mudah dilewatkan oleh satu pengembang.

Saya telah melewatkan beberapa pengait yang tersedia karena saya belum pernah melihat kebutuhan untuk menggunakannya. Satu set kait yang tidak saya bicarakan adalah kait alur kerja email. Jika Anda tidak menerima tambalan untuk kode Anda melalui email, kemungkinan besar Anda tidak akan pernah membutuhkannya. Anda dapat menemukan semua kait yang tersedia di dokumentasi.

Dalam praktiknya, kait yang paling sering saya gunakan adalah:

  • pra-komit
  • pra-dorong
  • komit-pesan
  • pra-terima
  • pasca-komit
  • pasca-terima

Sekarang mari kita lakukan sesuatu dengan kait ini.

Mengaktifkan Plugin WordPress dengan WP Cli dan Git Hooks

Untuk satu proyek klien tahun ini saya menambahkan toko, dan masih melakukan beberapa tugas di situs utama. Itu berarti situs utama tidak memiliki plugin WooCommerce kami yang diinstal atau diaktifkan. Saya perlu mengembangkan toko WooCommerce di satu cabang dan hanya setelah saya siap untuk menjalankan semuanya, apakah saya ingin memindahkan WooCommerce ke main.

Untuk memulai, kita memerlukan cabang baru bernama store. Kita bisa mendapatkan ini dengan menggunakan git checkout -b store . Ini menciptakan cabang baru dan memeriksanya untuk kami. Sekarang mari kita siapkan kailnya.

Pertama kita perlu membuat kait pasca-checkout dengan perintah ini touch .git/hooks/post-checkout .

Selanjutnya kita perlu membuatnya dapat dieksekusi. Kita dapat melakukan ini dengan perintah chmod dari terminal chmod +x .git/hooks/post-checkout .

Sekarang buka file di editor kode pilihan Anda dan salin kode di bawah ini ke file post-checkout Anda.

#! /bin/bash

wp plugin activate woocommerce

echo "activated WooCommerce"

wp plugin activate automatewoo

echo "activated AutomateWoo"

Anda dapat mendemonstrasikan ini dengan mengubah ke cabang mana pun melalui terminal. Anda akan melihat dua baris yang memberi tahu Anda bahwa WooCommerce dan AutomateWoo telah diaktifkan. Kami tahu ini berfungsi, tetapi itu tidak sesuai dengan yang kami inginkan karena itu akan mengaktifkan plugin setiap kali kami mengubah ke cabang mana pun.

Yang kami inginkan adalah menyalakannya saat kami pindah ke cabang toko kami, dan kemudian mematikannya saat kami berada di cabang utama kami. Untuk melakukan itu, kita memerlukan pengait untuk mendeteksi cabang mana yang kita miliki. Tukar isi post-checkout dengan kode di bawah ini.

#! /bin/bash

oldrev=$1
newrev=$2

branch_name="(git symbolic-ref HEAD 2>/dev/null)"

if [ "refs/head/store" = "$branch_name" ];then
wp plugin activate woocommerce
echo "activated Woo"

wp plugin activate automatewoo
echo "activated AutomateWoo"
fi

if [ "refs/head/main" = "$branch_name" ];then
wp plugin deactivate woocommerce
echo "deactivated Woo"

wp plugin deactivate automatewoo
echo "deactivated AutomateWoo"
fi

Kode ini dimulai dengan menetapkan cabang yang kita periksa ke variabel branch_name . Kemudian kita memiliki dua pernyataan if. Pemeriksaan pertama untuk melihat apakah kami telah pindah ke cabang toko. Jika sudah kita gunakan WP CLI untuk mengaktifkan WooCommerce dan AutomateWoo.

Pernyataan if berikutnya memeriksa untuk melihat apakah kita berada di cabang utama. Jika ya, itu akan menonaktifkan plugin dengan WP CLI dan memberi tahu kami tentangnya di terminal.

Mengontrol Alur Kerja Git dengan Git Hooks

Dalam posting sebelumnya di Git saya berbicara tentang alur kerja Git yang berbeda. Satu kasus penggunaan yang sangat umum untuk kait adalah menghentikan siapa pun dari melakukan kode langsung ke cabang utama. Anda dapat menggunakan pengait untuk memastikan bahwa semua kode digabungkan dari cabang yang berbeda ke utama.

Mulailah dengan mengganti nama pre-commit.sample menjadi pre-commit dan kemudian membuatnya dapat dieksekusi seperti yang telah saya jelaskan di atas. Selanjutnya ambil kode di bawah ini dan gunakan di file pre-commit.

#! /bin/bash

username=$GIT_AUTHOR_NAME
branch="$(git symbolic-ref HEAD 2>/dev/null)"

if [ "$branch" = "refs/heads/main" ]; then
echo "WHOA that was '"${branch}"' you should not do that. Stop doing silly stuff and create your own branch and merge it."
exit 1 # if you remove this it won't block the commit but it will send the message to slack

fi

Ini memeriksa untuk melihat apakah kita berada di cabang utama, dan jika ya, komit dihentikan. Kemudian ia mencetak pengingat kepada pengguna bahwa mereka tidak boleh melakukan langsung ke cabang utama.

Ingat banyak tempat berubah menjadi main sebagai cabang mereka. Proyek lama mungkin memerlukan master di sini jika belum diperbarui.

Anda bahkan dapat mengambil langkah lebih jauh dan menggunakan cURL untuk mengakses API dari aplikasi obrolan dan kemudian mengeluh secara publik bahwa seseorang mencoba untuk berkomitmen ke main.

Satu-satunya batasan git hooks adalah imajinasi Anda. Anda dapat menggunakannya untuk menghentikan seseorang dari melakukan jika TODO hadir dalam kode mereka atau untuk menghentikan spasi di akhir file.

Jika Anda memiliki beberapa bagian dari alur kerja Anda yang merupakan batu sandungan terus-menerus, lihat kait untuk mengotomatiskannya, sehingga Anda tidak perlu mengingatnya.