Git hook’lari
Git hook’lari
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-commitcommit-msgpre-pushpre-receivepost-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
echooperatorlarini qo‘shing. - Chiqish kodini tekshiring:
exit 0muvaffaqiyatni,exit 1esa muvaffaqiyatsizlikni bildiradi. - Windows’da kerak bo‘lsa,
.batyoki.ps1skriptlaridan 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!
