Cara Mempermudah Alur Kerja Pengembangan Tim Anda Dengan Git Hooks

Diterbitkan: 2022-03-10
Ringkasan cepat Alur kerja pengembangan dapat dengan mudah lepas kendali dan mulai menyebabkan kebingungan dan gesekan dalam tim — terutama karena ukurannya semakin besar. Ada terlalu banyak waktu ketika tinjauan kode kami hanya tentang memperhatikan bahwa koma yang hilang atau tes yang gagal yang tidak pernah berjalan sebelum mendorong ke repositori jarak jauh. Untungnya, ada alat yang dapat menghilangkan gesekan ini, membuat alur kerja pengembang lebih mudah, dan membantu kami berkonsentrasi pada hal-hal yang paling penting. Berkat git dan kait yang disediakannya, kami memiliki berbagai macam otomatisasi yang dengannya kami dapat mengatur alur kerja pengembangan kami dan membuat hidup kami lebih mudah.

Salah satu persyaratan utama bekerja untuk tim atau proyek sumber terbuka adalah menggunakan sistem kontrol versi (VCS). Git adalah sistem kontrol versi terdistribusi gratis dan open-source untuk melacak perubahan kode sumber selama pengembangan perangkat lunak. Ini telah dibuat oleh Linus Torvalds pada tahun 2005 untuk pengembangan kernel Linux. Mudah dipelajari dan memiliki jejak kecil dengan kinerja secepat kilat.

Ada kemungkinan besar Anda telah menggunakan Git (karena ini adalah salah satu alat VCS yang paling populer dan diadopsi dengan baik yang tersedia di komunitas pengembangan), dan kemungkinan besar Anda sudah memiliki pengetahuan tentang staging dan commit kode Anda dengan mendorong dan menarik dari repositori jarak jauh. Artikel ini tidak akan membahas dasar-dasar alur kerja git tetapi sebagian besar akan berfokus pada kait git dan cara menggunakannya untuk mencapai kolaborasi yang lebih baik dalam tim Anda. Dengan bertambahnya ukuran tim, menjadi semakin penting untuk menjaga kontributor tetap sejalan dan mempertahankan aturan yang berbeda tentang kode.

Apa Itu Git Hook?

Kait Git adalah skrip yang dipicu ketika tindakan atau peristiwa tertentu dilakukan di repositori git. Tindakan ini adalah tentang bagian dari alur kerja kontrol versi seperti melakukan dan mendorong. Kait dapat sangat berguna dengan mengotomatiskan tugas pada alur kerja git Anda. Misalnya, mereka dapat membantu kami memvalidasi sintaks basis kode kami berdasarkan beberapa aturan tertentu, atau menjalankan beberapa tes sebelum melakukan perubahan kami.

Lebih banyak setelah melompat! Lanjutkan membaca di bawah ini

Bagaimana Cara Mengaturnya?

Git hooks adalah fitur bawaan, artinya kita dapat mengaksesnya dan mulai menggunakannya selama repositori git diinisialisasi. Mari kita lihat lebih detail apa artinya dengan mencoba mengaturnya.

Menggunakan terminal favorit Anda, buat repositori git baru.

 mkdir my-new-repository && cd my-new-repository git init ls -la

Anda akan melihat bahwa direktori tersembunyi baru baru saja dibuat. Folder .git ini digunakan dari git untuk menyimpan informasi terkait repositori, seperti hash kontrol versi, informasi tentang komit, alamat repositori jarak jauh, dan sebagainya. Ini juga merupakan folder tempat hook sebenarnya hidup untuk git .git/hooks . Anda dapat menemukan beberapa contoh skrip yang telah diisi sebelumnya yang dibuat secara otomatis selama inisialisasi. Ini sebenarnya skrip yang akan dipicu setelah tindakan tertentu.

 ls .git/hooks

Beberapa sampel yang dapat Anda temukan adalah:

  • pre-commit.sample : dipanggil sesaat sebelum melakukan commit.
  • commit-msg.sample : edit file pesan di tempat.
  • post-receive.sample : dipanggil setelah repositori jarak jauh diperbarui.

Dibawah tenda

Sekarang kita tahu di mana kita dapat menemukan kait, mari kita mundur selangkah untuk memahami bagaimana cara kerjanya.

Kait Git berbasis peristiwa, jadi selama kita menjalankan perintah git dalam alur pengembangan, git akan memeriksa folder kait untuk menemukan apakah ada skrip terkait untuk dijalankan. Beberapa skrip ini akan berjalan sebelum atau setelah tindakan alur pengembangan ini.

Contoh yang baik untuk kita lalui dan lebih khusus memahami aliran di mana kait terpicu adalah alur kerja commit yang merupakan kasus penggunaan yang cukup familiar.

Setiap kali kami melakukan perubahan apa pun pada basis kode kami, beberapa kait terkait ini dipicu dalam urutan berikut:

  1. pre-commit : memeriksa snapshot yang akan dilakukan dan memverifikasi apa yang akan dilakukan.
  2. prepare-commit-msg : memungkinkan Anda mengedit pesan default sebelum pembuat komit melihatnya.
  3. commit-msg : menyetel pesan komit ke template.
  4. post-commit : menjalankan tindakan tepat setelah komit selesai, dan mengirimkan pemberitahuan misalnya.
Kait yang dieksekusi selama proses pembuatan komit
Kait yang dieksekusi selama proses pembuatan komit (Kredit gambar: Atlassian Bitbucket) (Pratinjau besar)

Dalam repositori di atas, sekarang mari kita coba dan tambahkan beberapa skrip pra dan pasca-komit kustom untuk lebih memvisualisasikan bagaimana git hooks benar-benar bekerja.

 nano .git/hooks/pre-commit

Tambahkan cuplikan berikut:

 #!/bin/sh echo Changes are about to be committed

Pastikan skrip kami dapat dieksekusi:

 chmod +x .git/hooks/pre-commit

Ulangi proses di atas untuk skrip post-commit :

 nano .git/hooks/post-commit
 #!/bin/sh echo Changes have been committed
 chmod +x .git/hooks/post-commit

Sekarang kita dapat menambahkan file baru nano index.html dengan cuplikan HTML kecil hanya untuk tujuan demonstrasi (tidak perlu memberi tahu validator HTML tentang ini).

 <h1>Hello world from our new repository!</h1>

Kami akan menambahkan perubahan dalam basis kode kami melalui staging dan kemudian melakukan ini:

 git add . git commit

Setelah commit berhasil diproses, kita dapat melihat output berikut dari dua skrip yang ditambahkan di atas:

 Changes are about to be committed Changes have been committed

Seperti yang diharapkan, git memicu kait dalam aliran komit. Skrip pre-commit dan post-commit yang telah ditambahkan sedang berjalan dan akan dieksekusi dalam urutan yang benar (berdasarkan urutan yang kami sebutkan sebelumnya).

Ini adalah demonstrasi sederhana untuk memahami cara kerja skrip alur kerja komit dan cara eksekusinya. Untuk detail selengkapnya tentang alur kerja ini, Anda dapat membaca selengkapnya di dokumentasi.

Dalam contoh di atas, kami memilih untuk menulis dua skrip ini di bash tetapi kenyataannya adalah git mendukung kait yang dapat ditulis dalam bahasa skrip apa pun yang kami inginkan. Ruby, Python, atau JavaScript adalah alternatif yang bagus, selama kita menetapkan shebang yang benar pada baris pertama skrip yang dapat dieksekusi.

Misalnya, kita dapat menulis ulang hook pre-commit sebagai skrip Node.js seperti di bawah ini:

 #!/usr/bin/env node console.log("Changes are about to be commited")

Kait Lokal Dan Jarak Jauh

Kait dipisahkan antara lokal dan jarak jauh (atau klien dan server). Sementara hook lokal berjalan sebelum atau setelah tindakan tertentu pada repositori lokal, hook jarak jauh berjalan sebelum atau setelah push ke server. Yang lokal tidak dapat digunakan untuk menegakkan kebijakan karena sifatnya memungkinkan pengembang dengan mudah mengubahnya. Mereka sebagian besar digunakan untuk berpegang pada beberapa pedoman khusus yang ingin kita terapkan dalam sebuah tim. Jika kami ingin lebih ketat dan menerapkan beberapa kebijakan untuk repositori kami, kami berada di pengait jarak jauh.

Kait Lokal

  • pre-commit
  • prepare-commit-msg
  • commit-msg
  • post-commit
  • applypatch-msg
  • pre-applypatch
  • post-applypatch
  • pre-rebase
  • post-rewrite
  • post-checkout
  • post-merge
  • pre-push

Kait Jarak Jauh

  • pre-receive
  • update
  • post-receive

Berbagi Kait

Git hooks adalah tentang membagikannya di dalam tim. Inilah alasan utama mereka ada: mempromosikan kolaborasi tim yang lebih baik, mengotomatiskan proses yang merugikan, dan membiarkan kami fokus hanya pada bagian penting dari basis kode.

Seperti yang dinyatakan sebelumnya, .git/hooks adalah folder yang menampung kait khusus kami, tetapi ini tidak terlalu membantu ketika kami perlu membagikan skrip ini ke dalam tim karena folder ini tidak dilacak oleh git.

Pendekatan yang baik untuk menyelesaikan ini adalah menambahkan semua kait khusus kami pada folder terpisah di dalam repositori kami. Misalnya, kita dapat menambahkan folder .githooks dan menyimpan skrip yang dapat dieksekusi di sana. Kemudian, pada inisialisasi proyek, kita dapat secara eksplisit menyalin atau menghubungkan skrip ini ke folder asli untuk menyimpan kait kita .git/hooks .

 find .git/hooks -type l -exec rm {} \\; find .githooks -type f -exec ln -sf ../../{} .git/hooks/ \\;

Atau, jika Anda menggunakan versi git terbaru (berbicara tentang 2.9 dan yang lebih baru), kami dapat langsung mengonfigurasi jalur git hooks ke folder khusus kami:

 git config core.hooksPath .githooks

Git Hooks Made Easy (Kasus Penggunaan Basis Kode JavaScript)

Ada alat yang membantu kami mengintegrasikan lebih lanjut git hooks dengan kebutuhan basis kode kami. Khusus untuk basis kode JavaScript, ada Husky yang dengannya kita dapat dengan mudah menyesuaikan tindakan pada peristiwa git melalui konfigurasi.

Misalnya, kita dapat dengan mudah membuat linting kode kita atau menjalankan beberapa pengujian di acara pre-commit dan melanjutkan komit berdasarkan apakah linting, pengujian, atau keduanya berhasil atau tidak.

Ini dapat dicapai dengan memperluas konfigurasi package.json hanya sebagai:

 { "scripts": { "test": "echo Running tests" }, "devDependencies": { "eslint": "5.16.0", }, "husky": { "hooks": { "pre-commit": "eslint . && npm test", } } }

Kesimpulan

Dalam artikel ini, kami menemukan bahwa tindakan berbeda yang dilakukan pada repositori git secara opsional dapat memicu skrip khusus untuk dijalankan. Skrip tersebut dapat berada di bawah kendali pengembang secara lokal atau dikelola secara lebih terpusat untuk tim atau proyek dari jarak jauh. Kami juga telah mempelajari bahwa skrip sering ditulis dalam skrip shell seperti bash, tetapi sebenarnya dapat menggunakan hampir semua bahasa skrip, bahkan JavaScript.

Git hooks dapat menjadi bagian yang sangat kuat dari alur kerja yang dirancang dengan baik, dan saya mendorong Anda untuk mencobanya dan melihat apa yang dapat Anda lakukan untuk proyek Anda sendiri.