اگه بخواین توی بعضی از ریپازیتوریها کانتریبیوت کنید، یکی از شروطشون اینه که کامیتتون امضا داشته باشه (ینی انتهاش نوشته شده باشه Signed-off-by: NAME <EMAIL>
با اسم و ایمیل درست). برای این کار دو روش وجود داره:
- استفاده از فلگ
-s
موقع اجرایgit commit
: مشکل این روش اینه که اولن خودکار نیست و دومن وقتی از ابزارهای دیگه برای کامیت کردن استفاده میکنیم (مثلن Github Desktop) نمیتونیم اون رو مجبور کنیم که از فلگ-s
استفاده کنه - امضا کردن اتوماتیک با کمکگرفتن از Git Hooks:
اگه گیت اسم و ایمیل شما رو نمیدونه، اول از همه با اجرا کردن این کامند توی ترمینالتون (Powershell توی ویندوز) اون رو بهش بگید:
git config --global user.name "FIRST_NAME LAST_NAME"
git config --global user.email "[email protected]"
و اگه میخواد توی ریپوزیتوری خاصی، اسم و ایمیل متفاوتی داشته باشید کافیه توی اون فولدر باشید و دستورای بالا رو بدون --global
اجرا کنید
به گیت بگید که هوکهای گلوبالتون رو از کجا باید بخونه (مثلن من اینجا از فولدر .githooks
استفاده کردم)
git config --global core.hooksPath ~/.githooks/
یه فایل به اسم prepare-commit-msg
توی اون آدرس درست کنید و با ادیتور مورد علاقهتون بازش کنید (اینجا من از vscode استفاده میکنم)
code ~/.githooks/prepare-commit-msg
محتویات زیر به اون فایل اضافه کنید
#!/bin/sh
NAME=$(git config user.name)
EMAIL=$(git config user.email)
if [ -z "$NAME" ]; then
echo "empty git config user.name"
exit 1
fi
if [ -z "$EMAIL" ]; then
echo "empty git config user.email"
exit 1
fi
git interpret-trailers --if-exists doNothing --trailer \
"Signed-off-by: $NAME <$EMAIL>" \
--in-place "$1"
همین! حالا کامیتهاتون به صورت خودکار امضا میشن 🙂