Git 2026

فصل ۲۶ · امضا و امنیت هویت

هویت و راز — امضا، 2FA، passkey و secret

امضای کامیت ثابت می‌کند این شیء با کلید ثبت‌شدهٔ تو ساخته شده. 2FA جلوی ورود با رمز تنها به حساب GitHub را می‌گیرد. secretهای لو رفته را git rm پاک نمی‌کند — در تاریخچه می‌مانند.

🎯 اهداف یادگیری

  • کامیت Signed و Verified را از هم تشخیص دهی
  • 2FA و passkey را روی حساب GitHub اجباری کنی
  • PAT، SSH و GitHub App را مقایسه کنی
  • secret را از تاریخچه پاک کنی اگر فاجعه شد

✅ Verified یعنی چه؟

GitHub کامیت را Verified می‌گذارد اگر:

  1. با کلید ثبت‌شده (SSH یا GPG یا S/MIME) امضا شده باشد
  2. نویسنده با حساب منطبق باشد

در فصل ۲ SSH signing را چیدیم. برای تگ انتشار:

تگ امضاشده
git tag -s v1.0.0 -m "Git GitHub Persian Guide 1.0.0"
git push origin v1.0.0

Ruleset می‌تواند Require signed commits را روی main اجباری کند.

🔐 حساب GitHub در ۲۰۲۶

حداقل‌ها:

  • Passkey / 2FA اجباری برای orgهای جدی
  • Sudo mode برای کارهای حساس
  • Session را در دستگاه عمومی قطع کن
  • SSH keys را سالی یک‌بار مرور کن
  • Authorized applications OAuth را هرس کن
  • Fine-grained PAT به‌جای classic، با انقضای کوتاه و دسترسی ریپوی مشخص
PAT را در Git ذخیره نکن
# SSH ترجیح این کتاب است
gh auth token    # نشان بده؛ در فایل پروژه نگذار
PAT داخل ریپو

Secret scanning گیت‌هاب بسیاری از توکن‌ها را push را رد می‌کند. اگر رد نشد، فوراً revoke کن — rotate، نه فقط delete فایل.

🧹 اگر secret وارد تاریخچه شد

فایل را از HEAD برداشتن کافی نیست
git rm --cached .env
echo .env >> .gitignore
git commit -m "chore: stop tracking env"
# تاریخچه هنوز راز را دارد!

برای پاک کردن تاریخچه:

  • git filter-repo (جانشین filter-branch)
  • BFG Repo-Cleaner
  • GitHub: Remove sensitive data + حتماً توکن را revoke

Force-push همهٔ کلون‌ها را باطل می‌کند. تیم باید دوباره clone کند.

در VS Code هیچ دکمه‌ای «پاک کردن تاریخچه» ندارد — و نباید داشته باشد.

🧑💻 VS Code و هویت

  • Accounts → GitHub sign in (برای PR و Copilot)
  • git.enableCommitSigning
  • هرگز token را در settings.json نگذار
سؤالات مصاحبه (با پاسخ)

Junior — Verified زرد/خاکستری؟ کلید با حساب یکی نیست یا فرمت امضا اشتباه است.

Mid — fine-grained در برابر classic PAT؟ محدود به ریپو، انقضا، permission جداگانه؛ classic practically root است.

Senior — چرا revoke مهم‌تر از filter-repo است؟ مهاجم ممکن است از قبل clone کرده باشد. پاک کردن تاریخچهٔ عمومی جلوی استفادهٔ توکن زنده را نمی‌گیرد.

✅ چک‌لیست فهم

  • 2FA/passkey روشن است
  • کامیت‌ها Verifiedاند
  • PAT کلاسیک نداری
  • می‌دانی rm --cached راز را از گذشته پاک نمی‌کند

فصل بعد: Rulesets — سیاست مدرن شاخه.

فصل ۲۶ از ۳۶ · مرجع جامع و حرفه‌ای Git و GitHub · ویرایش 1.0.0