هر کامیت نام و ایمیل را داخل خودش ذخیره میکند. اگر این دو را غلط بگذاری، تاریخچه مال کس دیگری به نظر میرسد. این فصل را یکبار درست تنظیم کن.
🎯 اهداف یادگیری
- Git را روی Windows / macOS / Linux نصب و نسخه را چک کنی
user.nameوuser.emailرا درست — و ترجیحاً محلی — تنظیم کنی- SSH Key بسازی، به GitHub اضافه کنی و با
gh authوارد شوی - کامیتها را با SSH sign کنی (جایگزین مدرن GPG)
🛠️ نصب Git ۲.۵۱+
# Debian / Ubuntu sudo apt update && sudo apt install -y git gh # macOS brew install git gh # Windows (پاورشل بهعنوان Admin) winget install Git.Git GitHub.cli git --version # باید ۲.۵۱ یا جدیدتر باشد gh --version
در VS Code: از Command Palette (Ctrl+Shift+P) بنویس Git: Show Git Output. اگر Git پیدا نشود، مسیر را در git.path تنظیم کن.
🪪 هویت — دو لایه
دو هویت جدا وجود دارد و باید یکی باشند:
- هویت Git — همان
user.nameوuser.emailکه داخل هر کامیت نوشته میشود. - حساب GitHub — ایمیلی که در Settings گیتهاب ثبت کردهای.
اگر ایمیل کامیت با ایمیل حساب یکی نباشد، کنار کامیت در GitHub آواتار خاکستری میبینی و نشان Verified (تأیید امضا) نمیآید.
# سراسری — فقط اگر یک هویت داری git config --global user.name "rezaian-dev" git config --global user.email "mrezaian.dev@gmail.com" # بهتر: هویت داخل هر مخزن (توصیهٔ تیمی) git config user.name "rezaian-dev" git config user.email "mrezaian.dev@gmail.com" git config --global init.defaultBranch main git config --global pull.rebase false git config --global fetch.prune true git config --global rerere.enabled true git config --global core.editor "code --wait" git config --global alias.st status git config --global alias.lg "log --oneline --graph --decorate --all"
اگر نمیخواهی ایمیلت در تاریخچهٔ عمومی دیده شود، از noreply گیتهاب استفاده کن:
12345678+rezaian-dev@users.noreply.github.com
در Settings → Emails گزینهٔ Block command line pushes that expose my email را روشن کن.
🔑 SSH — درِ جلویی GitHub
HTTPS با token کار میکند اما SSH برای کار روزانه تمیزتر است.
ssh-keygen -t ed25519 -C "mrezaian.dev@gmail.com" # Enter — passphrase قوی بگذار eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 # کلید عمومی را کپی کن cat ~/.ssh/id_ed25519.pub
در GitHub: Settings → SSH and GPG keys → New SSH key. بعد:
ssh -T git@github.com # Hi rezaian-dev! You've successfully authenticated...
در VS Code وقتی Clone میکنی، اگر remote با git@github.com: شروع شود از همین کلید استفاده میشود.
✍️ امضای کامیت با SSH — استاندارد ۲۰۲۶
GPG هنوز معتبر است اما SSH signing سادهتر است و همان کلید را دوباره مصرف میکند.
git config --global gpg.format ssh git config --global user.signingkey ~/.ssh/id_ed25519.pub git config --global commit.gpgsign true git config --global tag.gpgsign true
همان کلید عمومی را در GitHub بهعنوان Signing Key هم اضافه کن. بعد از آن، کامیتهایت نشان Verified میگیرند.
در Settings بگذار:
git.enableCommitSigning: true
دکمهٔ Commit از همین تنظیم پیروی میکند — لازم نیست هر بار پرچم -S بزنی.
🐙 ورود با GitHub CLI
gh auth login # GitHub.com → SSH → Login with browser gh auth status gh api user --jq .login # rezaian-dev
از این به بعد gh repo create، gh pr create و gh run list بدون token دستی کار میکنند.
🧩 تنظیمات VS Code که Senior میچیند
{ "git.enabled": true, "git.autofetch": true, "git.confirmSync": false, "git.enableSmartCommit": false, "git.enableCommitSigning": true, "git.untrackedChanges": "separate", "git.branchProtection": ["main", "master"], "git.branchProtectionPrompt": "alwaysCommitToNewBranch", "git.rebaseWhenSync": false, "scm.defaultViewMode": "tree", "diffEditor.ignoreTrimWhitespace": false }
🧩 افزونهٔ گیت VS Code — اتاق فرمان روزانه
Git داخل VS Code سه لایه دارد. این کتاب هر فرمان را با هر دو مسیر یاد میدهد: ترمینال و این افزونهها.
| لایه | شناسهٔ افزونه | نقش |
|---|---|---|
| Git توکار | همراه VS Code | Source Control، Stage، Commit، Branch، Sync |
| GitHub Pull Requests | GitHub.vscode-pull-request-github |
Clone از GitHub، Checkout PR، ریویو اینلاین، Merge |
| Git Graph یا GitLens | mhutchie.git-graph / eamodio.gitlens |
DAG رنگی، blame خطی، مقایسهٔ کامیتها |
| GitHub Actions | github.vscode-github-actions |
وضعیت workflow کنار ادیتور |
نصب از خود ادیتور:
Ctrl+Shift+X→ Extensions- جستوجو:
GitHub Pull Requests→ Install - جستوجو:
Git Graph→ Install - Accounts (پایین Activity Bar) → Sign in to GitHub
Ctrl+Shift+Gباید پنل Source Control را باز کند — خانهٔ روزانهٔ Git در این کتاب؛ فصل ۱۰ و ۱۱ آن را تا تسلط کامل میروند.
Commit: جعبهٔ پیام → Ctrl+Enter
شاخه: کلیک روی main در نوار وضعیت
Sync: آیکون ↻ کنار نام شاخه
PR: آیکون GitHub در Activity Bar
git commit -m "..."
git switch -c feat/x
git push -u origin HEAD
gh pr create --fill
قانون این کتاب: مفهوم را در ترمینال بفهم؛ کار روزانه را در VS Code انجام بده. Senior هر دو را بلداست.
Junior — چرا SSH بهتر از HTTPS است؟ کلید روی دیسک میماند، passphrase در agent کش میشود، و token PAT را هر چند ماه عوض نمیکنی.
Mid — تفاوت user.email و حساب GitHub؟ Git فیلد را داخل شیء commit مینویسد. GitHub با همان ایمیل کامیت را به پروفایل وصل میکند.
Senior — چرا امضا مهم است؟ بدون امضا هر کسی میتواند با user.name تو کامیت جعلی بسازد. Verified یعنی کلید ثبتشده در GitHub آن شیء را امضا کرده.
✅ چکلیست فهم
git --versionحداقل ۲.۵۱ استuser.name/user.emailبا GitHub یکی استssh -T git@github.comسلام میدهد- کامیت تست با نشان Verified ساختهای
- VS Code Signing و branch protection روشن است
فصل بعد: سه درخت Git — جایی که ۸۰٪ سردرگمی متولد میشود.