Git hook’lari

Git hook’lari


ULASHISH

Git hook’lari nima?

Git hook’lari — commit qilish yoki kodni push qilish kabi muayyan Git hodisalari sodir bo‘lganda avtomatik ishga tushadigan skriptlar.


Nega hook’lardan foydalanish kerak?

Hook’lar takrorlanuvchi vazifalarni avtomatlashtirish, kodlash standartlariga rioya qilishni ta’minlash va muammolarni erta aniqlashga yordam beradi.

Masalan, quyidagilarni qilishingiz mumkin:

  • Har bir commit yoki push’dan oldin testlarni ishga tushirish
  • Kod uslubini avtomatik tekshirish
  • Yomon commit xabarlarini bloklash
  • Jamoangizdagi hamma uchun qoidalarni joriy qilish

Hook’lar qayerda joylashadi?

Hook’lar repozitoriyingiz ichidagi .git/hooks papkasida saqlanadi.

Standart holatda .sample bilan tugaydigan namuna skriptlarni ko‘rasiz.

Misol: Mavjud hook’larni ro‘yxat qilish

ls .git/hooks

Hook’ni qanday yoqish mumkin

Hook’ni yoqish uchun .sample kengaytmasini olib tashlang va skriptni bajariladigan qiling.

Masalan, pre-commit hook’ini yoqish uchun:

Misol: pre-commit hook’ini yoqish (Linux/macOS)

mv .git/hooks/pre-commit.sample .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

Windows’da faylni shunchaki pre-commit deb qayta nomlang va uni shell’ingiz ishga tushira olishiga ishonch hosil qiling (masalan, kerak bo‘lsa, .bat yoki .ps1’dan foydalaning).



Hook turlari

Hook’larning ko‘plab turlari mavjud, lekin eng keng tarqalganlari quyidagilar:

  • pre-commit
  • commit-msg
  • pre-push
  • pre-receive
  • post-receive

pre-commit hook’i

pre-commit hook’i commit qilishingizdan oldin ishga tushadi.

Undan kod uslubini tekshirish, testlarni ishga tushirish yoki biror narsa noto‘g‘ri bo‘lsa, commit’ni to‘xtatish uchun foydalanishingiz mumkin.

Misol: Oddiy pre-commit hook’i

#!/bin/sh
# Stop commit if any .js file has "console.log"
grep -r 'console.log' *.js && {
  echo "Remove console.log before committing!"
  exit 1
}

commit-msg hook’i

commit-msg hook’i commit xabarini tekshiradi yoki tahrirlaydi.

Masalan, u tiket raqami bo‘lmagan commit’larni bloklashi mumkin.

Misol: commit-msg hook’i

#!/bin/sh
# Block commit if message does not contain a ticket number
if ! grep -qE 'JIRA-[0-9]+' "$1"; then
  echo "Commit message must have a ticket number (e.g. JIRA-123)"
  exit 1
fi

pre-push hook’i

pre-push hook’i kodni masofaviy repozitoriyga push qilishingizdan oldin ishga tushadi.

Undan kodni ulashishdan oldin testlar yoki tekshiruvlarni ishga tushirish uchun foydalanishingiz mumkin.

Misol: pre-push hook’i

#!/bin/sh
npm test || exit 1

Server tomonidagi hook’lar

Ba’zi hook’lar (masalan, pre-receive) sizning kompyuteringizda emas, Git serverida ishga tushadi.

Ular repozitoriyga push qiladigan hamma uchun qoidalarni joriy qilishi mumkin.

Misol: pre-receive hook’i

#!/bin/sh
# Block pushes to main branch
grep refs/heads/main || exit 1

Maxsus hook’lar

Istalgan maxsus skriptni hook sifatida yozishingiz mumkin.

Uni shunchaki .git/hooks papkasiga joylashtiring va bajariladigan qiling.

Misol: Maxsus hook

#!/bin/sh
echo "Hello from my custom hook!"

Nosozliklarni tuzatish va eng yaxshi amaliyotlar

  • Hook skriptingiz bajariladigan ekaniga ishonch hosil qiling (chmod +x scriptname).
  • Skriptingiz nima qilayotganini ko‘rish uchun echo operatorlarini qo‘shing.
  • Chiqish kodini tekshiring: exit 0 muvaffaqiyatni, exit 1 esa muvaffaqiyatsizlikni bildiradi.
  • Windows’da kerak bo‘lsa, .bat yoki .ps1 skriptlaridan foydalaning.
  • Hook’larni oddiy va tez saqlang — sekin hook’lar ish jarayoningizni sekinlashtiradi.
  • Foydali hook’larni jamoangiz bilan ulashing (lekin yodda tuting: hook’lar standart holatda versiyalanmaydi).

Eslatma: Hook’lar tekshiruvlarni (masalan, linting yoki testlarni) avtomatlashtirish va jamoa standartlarini joriy qilish uchun kuchli vositadir. Mijoz tomonidagi hook’lar sizning kompyuteringizda ishlaydi. Server tomonidagi hook’lar Git serverida ishlaydi.




W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!