امضای کامیت ثابت میکند این شیء با کلید ثبتشدهٔ تو ساخته شده. 2FA جلوی ورود با رمز تنها به حساب GitHub را میگیرد. secretهای لو رفته را git rm پاک نمیکند — در تاریخچه میمانند.
🎯 اهداف یادگیری
- کامیت Signed و Verified را از هم تشخیص دهی
- 2FA و passkey را روی حساب GitHub اجباری کنی
- PAT، SSH و GitHub App را مقایسه کنی
- secret را از تاریخچه پاک کنی اگر فاجعه شد
✅ Verified یعنی چه؟
GitHub کامیت را Verified میگذارد اگر:
- با کلید ثبتشده (SSH یا GPG یا S/MIME) امضا شده باشد
- نویسنده با حساب منطبق باشد
در فصل ۲ 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، با انقضای کوتاه و دسترسی ریپوی مشخص
# SSH ترجیح این کتاب است gh auth token # نشان بده؛ در فایل پروژه نگذار
Secret scanning گیتهاب بسیاری از توکنها را push را رد میکند. اگر رد نشد، فوراً revoke کن — rotate، نه فقط delete فایل.
🧹 اگر secret وارد تاریخچه شد
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 — سیاست مدرن شاخه.