Git 2026

فصل ۲ · نصب و هویت

نصب و هویت — ستاپ حرفه‌ای Git در ۲۰۲۶

هر کامیت نام و ایمیل را داخل خودش ذخیره می‌کند. اگر این دو را غلط بگذاری، تاریخچه مال کس دیگری به نظر می‌رسد. این فصل را یک‌بار درست تنظیم کن.

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

  • Git را روی Windows / macOS / Linux نصب و نسخه را چک کنی
  • user.name و user.email را درست — و ترجیحاً محلی — تنظیم کنی
  • SSH Key بسازی، به GitHub اضافه کنی و با gh auth وارد شوی
  • کامیت‌ها را با SSH sign کنی (جایگزین مدرن GPG)

🛠️ نصب Git ۲.۵۱+

نصب — لینوکس / macOS / Windows
# 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 تنظیم کن.

🪪 هویت — دو لایه

دو هویت جدا وجود دارد و باید یکی باشند:

  1. هویت Git — همان user.name و user.email که داخل هر کامیت نوشته می‌شود.
  2. حساب 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"
ایمیل مخفی GitHub

اگر نمی‌خواهی ایمیلت در تاریخچهٔ عمومی دیده شود، از noreply گیت‌هاب استفاده کن:

12345678+rezaian-dev@users.noreply.github.com

در Settings → Emails گزینهٔ Block command line pushes that expose my email را روشن کن.

🔑 SSH — درِ جلویی GitHub

HTTPS با token کار می‌کند اما SSH برای کار روزانه تمیزتر است.

ساخت کلید Ed25519
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 می‌گیرند.

VS Code

در Settings بگذار:

git.enableCommitSigning: true

دکمهٔ Commit از همین تنظیم پیروی می‌کند — لازم نیست هر بار پرچم -S بزنی.

🐙 ورود با GitHub CLI

gh auth
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 می‌چیند

.vscode/settings.json — گیت
{
  "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 کنار ادیتور

نصب از خود ادیتور:

  1. Ctrl+Shift+X → Extensions
  2. جست‌وجو: GitHub Pull Requests → Install
  3. جست‌وجو: Git Graph → Install
  4. Accounts (پایین Activity Bar) → Sign in to GitHub
  5. Ctrl+Shift+G باید پنل Source Control را باز کند — خانهٔ روزانهٔ Git در این کتاب؛ فصل ۱۰ و ۱۱ آن را تا تسلط کامل می‌روند.
🖥️ VS Code Git

Commit: جعبهٔ پیام → Ctrl+Enter شاخه: کلیک روی main در نوار وضعیت Sync: آیکون ↻ کنار نام شاخه PR: آیکون GitHub در Activity Bar

⌨️ Terminal

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 — جایی که ۸۰٪ سردرگمی متولد می‌شود.

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