امضای اتوماتیک کامیت‌های گیت

اگه بخواین توی بعضی از ریپازیتوری‌ها کانتریبیوت کنید، یکی از شروط‌شون اینه که کامیت‌تون امضا داشته باشه (ینی انتهاش نوشته شده باشه Signed-off-by: NAME <EMAIL>‍ با اسم و ایمیل درست). برای این کار دو روش وجود داره:

  1. استفاده از فلگ -s موقع اجرای git commit: مشکل این روش اینه که اولن خودکار نیست و دومن وقتی از ابزارهای دیگه برای کامیت کردن استفاده می‌کنیم (مثلن Github Desktop) نمی‌تونیم اون رو مجبور کنیم که از فلگ -s استفاده کنه
  2. امضا کردن اتوماتیک با کمک‌گرفتن از 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"

همین! حالا کامیت‌هاتون به صورت خودکار امضا می‌شن 🙂