Git برای توسعه دهندگان نرم افزار، برنامه نویسان و مهندسان ضروری است تا تغییرات ایجاد شده در پروژه های خود را برای همکاری کارآمدتر پیگیری کنند.
Hook های Git یکی ویژگی های داخلی Git هستند. هوک های گیت به کاربران اجازه می دهند هر بار که یک رویداد خاص رخ می دهد، اقدامات سفارشی را خودکار کنند.
برخی از مزایای پیاده سازی هوک ها در Git شامل گردشهای کاری یکپارچهسازی مداوم، حفظ خط مشی تعهد و جلوگیری از اقداماتی است که با استانداردهای تعریف شده مطابقت ندارند.
در این مقاله، درباره Hook ها در گیت چه هستند و نحوه استفاده از آنها در سمت کلاینت و سرور بیشتر خواهید آموخت.
Git چیست؟
قبل از پرداختن به این موضوع که git hooks چگونه کار میکنند و نحوه استفاده از آنها، اجازه دهید به سرعت به چیستی Git بپردازیم.
Git یک برنامه کنترل نسخه منبع باز است. با استفاده از آن، کاربران می توانند توسعه نرم افزار را با جزئیات نظارت و پیگیری کنند. شما می توانید شاخه های توسعه ایجاد کنید، تغییرات را ثبت کنید و کنترل مطلق بر نسخه های فایل پروژه خود داشته باشید.
Git در بین توسعه دهندگان نرم افزار بسیار محبوب است و اکثر پروژه های متن باز از آن استفاده می کنند. (گیت چیست؟)
Git Hooks چیست؟
هوک های Git، اسکریپت هایی هستند که به طور خودکار قبل یا بعد از اجرای دستورات Git مانند Commit و Push اجرا میشوند. با اسکریپتهای Hook Git، کاربران میتوانند رفتار داخلی Git را با خودکار کردن اقدامات خاص در سطح برنامهها و استقرار، سفارشی کنند.
Git شامل نمونههایی از hook ها در هر مخزن Git است. با این حال، سایت هایی مانند GitHub یا GitLab در وهله اول اجازه استفاده از آنها را نمی دهند. به همین دلیل است که git hooks عمدتاً در موارد محلی یا خصوصی استفاده میشوند. به خاطر داشته باشید که سیستم برای اجرای یک هوک خاص باید مجوزهای اجرایی داشته باشد. (برای دریافت اطلاعات بیشتر، بهتر است آموزش کار با گیت و گیت هاب را مشاهده کنید.)
نحوه استفاده از Git Hooks
اسکریپت های هوک در دایرکتوری .git/hooks/ ذخیره می شوند. با ویژگی دایرکتوری الگوی Git، کاربران می توانند آنها را به طور خودکار نصب کنند. هر زمان که از «git init» یا «git clone» استفاده میکنید، تمام فایلها و دایرکتوریهای درون فهرست قالب در مخزن خالی جدید Git کپی میشوند.
در .git/hooks/، یک سری هوک های نمونه مانند commit-msg.sample، post-update.sample و pre-commit.sample را خواهید یافت که برای شروع خوب هستند. نصب هوک ها شامل ایجاد یک فایل اجرایی و ذخیره آن در دایرکتوری .git/hooks/ است.
نحوه استفاده از Local Hook ها
هوک های محلی یا سمت کلاینت توسط رویدادهایی که در رایانه محلی اجرا میشوند، مانند زمانی که یک پروژه را انجام میدهید یا ادغام میکنید، فعال میشوند.
به طور کلی، سه نوع هوک محلی یا سمت کاربر وجود دارد:
- Committing-workflow hooks: اینها اسکریپتهای هوک مربوط به فرآیند committing هستند – pre-commit، pres-commit-msg، commit-msg و post-commit.
- Email workflow hooks: اینها اسکریپت های هوک برای پروژه هایی با گردش کار مبتنی بر ایمیل هستند که از دستور git am استفاده میکنند. این شامل applicationpatch-msg، pre-applypatch و post-applypatch می شود.
- هوک های دیگر: آنها شامل سایر اسکریپت های هوک محلی مانند پیش بازنویسی، پس از بازنویسی، پس از پرداخت، پس از ادغام، پیش فشار، و پیشسازگاری خودکار هستند.
برای نصب git hook:
- دایرکتوری git/hooks/ مخزن خود را باز کنید.
- فایل نمونه هوکی را که می خواهید استفاده کنید پیدا کنید.
- “.sample” را از نام فایل هوک حذف کنید. به عنوان مثال، “pre-commit.sample” باید به “pre-commit” تغییر یابد.
- قلاب را با تغییر مجوزهای آن با استفاده از دستور Git زیر قابل اجرا کنید:
chmod +x [hook-name] - زبان برنامه نویسی را که می خواهید برای هوک استفاده کنید انتخاب کنید. شما در استفاده از هر زبان اسکریپتی، از جمله پایتون، Bash یا sheet آزاد هستید.
- فایل hook را در برنامه ویرایشگر کد خود باز کنید و زبان برنامه نویسی انتخابی خود را تعریف کنید. مسیر مفسر را در دستور قرار دهید.
اگر می خواهید از پایتون استفاده کنید:
#!/usr/bin python
اگر می خواهید از Bash استفاده کنید:
#!/bin/bash
اگر می خواهید از پوسته استفاده کنید:
#!/bin/sh
8. اسکریپت هوک را به زبان اسکریپت انتخابی بنویسید.
به خاطر داشته باشید که برای اینکه یک git hook به درستی اجرا شود، مقدار خروج باید 0 باشد. برای شکست آن، مقدار خروج باید 1 باشد. اگر میخواهید شرایط متعددی را لحاظ کنید، شرط ها باید در یک فایل وجود داشته باشند.
همچنین مهم است که به یاد داشته باشید که اسکریپت های هوک به طور پیش فرض در کنترل نسخه Git بررسی نمی شوند. به عبارت دیگر، آنها نمی توانند متعهد شوند. اگر دایرکتوری hooks محلی حذف شود، Git همه هوک ها و نسخه های قبلی آنها را به طور کامل از پروژه حذف می کند.
به عنوان یک راه حل، می توانید یک پیوند نمادین (پیوند نمادین) به مخزن Git اضافه کنید. در نتیجه، اسکریپت های هوک فعال شده را می توان به کنترل نسخه کامیت کرد. در اینجا نحوه انجام آن آمده است:
- یک دایرکتوری جدید Git با نام “hooks” در پروژه اصلی خود ایجاد کنید.
- فایل هوک را از .git/hooks/ کپی کرده و در دایرکتوری «hooks» جدید قرار دهید. اگر هنوز یک فایل نمونه است، با حذف «.sample» از نام فایل، آن را قابل اجرا کنید.
- به .git/hooks/ بروید و یک فایل خالی جدید با همان نام فایل ایجاد کنید.
- با وارد کردن دستور زیر در Git یک Symlink جدید ایجاد کنید:
ln -s -f ../hooks/[hook-name] .git/hooks/[hook-name]
علاوه بر این، اگر به دلایلی می خواهید یک هوک فعال را دور بزنید، “–no-verify” را به دستور مربوطه اضافه کنید. برای مثال دستور زیر را برای skip commit hook وارد کنید:
git commit –no-verify -m [commit message]
آموزش استفاده از Pre-Hooks
یک پیش هوک، قبل از رویداد خاص در مخزن Git اجرا می شود. به عنوان مثال، قلاب pre-commit را می توان برای اجرای سیاست commit و جلوگیری از commit های نادرست استفاده کرد. اگر هوک با وضعیت غیر صفر خارج شود، Git آن را لغو می کند.
در اینجا چند نمونه از Pre-Hook های محلی آورده شده است:
- Pre-applypatch: وضعیت درخت کار را بررسی میکند. پس از اعمال نسخه جدید اما قبل از انجام تغییرات فراخوانی می شود.
- Pre-applypatch: محتوای خود commit مانند سبک کد یا فضای خالی انتهایی را بررسی می کند. حتی قبل از تایپ شدن پیام commit فراخوانی می شود.
- Pre-merge-commit: یک commit خودکار ادغام را فراخوانی می کند که توسط “git merge” احضار شده است. پس از ادغام اما قبل از دریافت فایل پیام commit پیشنهادی فراخوانی می شود.
- Pre-push: از بهروزرسانیهای ref را قبل از انجام فشار تأیید میکند. پس از بهروزرسانی refهای راه دور، اما قبل از انتقال هر گونه تغییر جدید، در حین «git push» اجرا میشود.
- Pre-rebase بنیاد تغییر مجدد هر commit Git را که قبلاً انجام شده است، مجاز نمیداند. قبل از اینکه “git rebase” رخ دهد، نامیده می شود.
برخی از این هوک ها ممکن است شبیه به یکدیگر به نظر برسند، مانند اسکریپت های قبل از پوش و پیش از کامیت. مهم است که بدانید کدام هوک نیازهای شما را بهتر برآورده می کند.
اسکریپت pre-commit قبل از تایپ یک پیام commit اجرا می شود، در حالی که پیش از پوش قبل از بارگذاری محتوای جدید در یک مخزن راه دور اجرا می شود. آنها در نقاط مختلف چرخه پروژه کار می کنند، اما شما می توانید از هر دو برای جلوگیری از کامیت و پوش های نادرست استفاده کنید و گردش کار بهتری را تضمین کنید.
استفاده از پست هوک (Post-Hooks)
Git پس از وقوع یک رویداد خاص در مخزن، یک post hook را اجرا می کند. Post-hooks اغلب برای خودکارسازی پاسخها به سایر اقدامات، مانند ارسال ایمیلهای اعلان هنگام اضافه شدن یک Git commit جدید استفاده میشود.
در اینجا چند نمونه از پست هوک های محلی آورده شده است:
- post-applypatch: پس از اعمال پچ به یک گروه یا نویسنده پچ اطلاع می دهد. پس از اعمال و کامیت یک نسخه جدید فراخوانی می شود.
- post-commit: پس از اتمام کل فرآیند commit، اعلان ها را ایجاد می کند.
- post-checkout: شرایط را تأیید می کند، تفاوت ها را نمایش می دهد و یک فهرست کاری مناسب برای محیط پروژه تنظیم می کند. پس از تکمیل موفقیت آمیز “git checkout” اجرا می شود.
- post-merge: ذخیره می کند، مجوزها را اعمال می کند، و سایر داده های ردیابی نشده را در درخت کار بازیابی می کند. پس از یک فرمان موفق “git merge” فراخوانی می شود.
- post-rewrite: می تواند مشابه قلاب های پس از پرداخت و پس از ادغام استفاده شود. توسط دستورات Git اجرا می شود که جایگزین commit ها می شوند، مانند “git rebase”.
نحوه استفاده از های های سمت سرور (Server-Side Hooks)
اسکریپت های هوک های سمت سرور بر روی مخازن راه دور یا سرورهایی که فشارها را از یک کامپیوتر محلی دریافت می کنند اجرا می شوند. آنها می توانند قبل یا بعد از پوش سرور اجرا شوند. برای مثال، Server-side pre-hooks، میتوانند هر پوش Git را که با یک پیام غیر صفر خارج میشود، لغو کنند.
در اینجا چند نمونه از هوک های سمت سرور آورده شده است:
- pre-receive: منابعی را که به مخزن راه دور منتقل می شوند فهرست می کند. میتوان از آن برای اطمینان از اینکه هیچ یک از مراجع به روزرسانی شده غیرقابل پیشبرد نیستند یا برای انجام کنترل دسترسی برای همه فایلهایی که با فشار Git تغییر میکنند، استفاده کرد.
- update: هدف مشابهی برای پیش دریافت دارد. تنها تفاوت این است که به روز رسانی یک بار برای هر شعبه اجرا می شود، در حالی که پیش دریافت می تواند یک بار برای چندین شعبه اجرا شود.
- post-receive: لیستی را ایمیل می کند، به سرور یکپارچه سازی مداوم اطلاع می دهد، یا سیستم ردیابی بلیط را به روز می کند. پس از بهروزرسانی همه مراجع، در حین فشار دادن، روی سرور راه دور اجرا میشود.
- post-update: اعلان ها را برای مراجع تحت پوش، اجرا می کند. به طور مشابه پس از دریافت کار می کند – تنها تفاوت این است که مقادیر ref قدیمی یا جدید را دریافت نمی کند. بعد از اینکه همه موارد به سرور راه دور فرستاده شدند، یک بار اجرا می شود.
مراحل نصب هوک سمت سرور همانند هوک های سمت سرویس گیرنده می باشد. تنها تفاوت این است که شما باید اسکریپت ها را به جای دایرکتوری محلی در دایرکتوری git/hooks. واقع در سرور راه دور قرار دهید.
نمونه های Git Hook
موارد استفاده زیادی برای اسکریپت های هوک وجود دارد. به نمونه های زیر دقت کنید.
نمایش اطلاعات در مورد یک اقدام کامیت
این مثال اطلاعات یک اقدام Git commit را نشان می دهد. این هوک پس از دریافت پیام commit پیش فرض و قبل از باز شدن ویرایشگر پیام commit فراخوانی می شود.
در پوشه .git/hooks/ مخزن Git فایلی به نام prede-commit-msg بسازید. سپس اسکریپت زیر را بنویسید:
#!/bin/sh
SOB=$(git config github.user)
grep -qs “^$SOB” “$1” || echo “. Cambio por @$SOB” >> “$1”
پس از اتمام، آن را ذخیره کنید و مجوزهای اجرا را روی فایل تنظیم کنید.
:~$ chmod +x prepare-commit-msg
با این هوک ساده، بلافاصله اطلاعات مربوط به یک اقدام commit را هنگامی که انجام شد، دریافت خواهیم کرد.
با آپلود تغییرات، اسناد را ایجاد کنید
هوک pre-push اجازه می دهد تا در صورت داشتن یک ژنراتور، مستندات کد خود را تولید کنیم. هر بار که ما تغییری ایجاد می کنیم، مستندات به طور خودکار جمع آوری می شوند.
هوک pre-push را مانند قبل در پوشه Git ایجاد کنید و اسکریپت زیر را اضافه کنید:
#!/bin/bash
doxygen Doxyfile
git add docs/
git commit -m “Update documentation ($(date +%F@%R))”
فایل را ذخیره کنید و مجوز اجرا را تنظیم کنید.
:~$ chmod +x pre-push
فضای سفید انتهایی را در Commits پیدا و رفع کنید
ساخت این هوک پیشفرض بسیار ساده است. یک فایل به نام pre-commit درست کنید و اسکریپت زیر را به آن اضافه کنید:
#!/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
اکنون فضای خالی انتهایی در تمام commit ها پیدا و رفع خواهد شد.
جمع بندی
آموزش استفاده از git hooks به توسعه دهندگان نرم افزار، برنامه نویسان و مهندسان اجازه می دهد تا هر بار که یک رویداد خاص در مخزن Git خود اتفاق می افتد، اقدامات سفارشی را خودکار کنند.
در این آموزش، نحوه استفاده از هوک های محلی و سمت سرور را برای اهداف متعدد بررسی کرده ایم. ما همچنین چند نمونه از هوک های Git و نحوه نصب آنها را ارائه کردیم.
امیدواریم این مقاله به شما کمک کرده باشد که از Git تا حد امکان استفاده کنید. اگر سوال یا نکته ای دارید، در قسمت نظرات در زیر آن را مطرح کنید.
نوشته آموزش استفاده از git hooks اولین بار در امیر رسولی. پدیدار شد.
بدون دیدگاه