Git 2026

فصل ۱۶ · Clone و Fork

Clone، Fork و Upstream — ورود به کد دیگران

Clone = کپی مخزن روی رایانهٔ تو (با تاریخچه). Fork = کپی مخزن زیر حساب GitHub خودت. PR را باید از fork خودت به مخزن اصلی بفرستی؛ اگر فقط clone کرده باشی و حق push نداشته باشی، PR ساخته نمی‌شود.

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

  • clone را با عمق و فیلتر درست انجام دهی
  • fork را با origin و upstream بچینی
  • شاخه را به‌روز نگه داری تا PR تمیز بماند

📥 clone

clone هوشمند
git clone git@github.com:rezaian-dev/javascript-persian-guide.git
git clone --depth 1 <url>              # فقط نوک — سریع، تاریخچه ناقص
git clone --filter=blob:none <url>     # partial؛ blob تنبل
gh repo clone rezaian-dev/javascript-persian-guide
🖥️ VS Code + GitHub
  1. Palette: Git: Clone یا Welcome → Clone Git Repository
  2. اگر افزونهٔ GitHub Pull Requests وصل است: Clone from GitHub و لیست ریپوهایت
  3. پوشه را انتخاب کن → Open
  4. Fork از Command Palette: GitHub Pull Requests: Fork
⌨️ Terminal

git clone git@github.com:org/repo.git gh repo clone org/repo gh repo fork org/repo --clone

depth 1 و بعدش

shallow clone برای CI عالی است. برای کار روزانه bisect و blame را ضعیف می‌کند. با git fetch --unshallow کاملش کن.

🍴 Fork — مدل مشارکت OSS

چیدمان استاندارد
gh repo fork rezaian-dev/javascript-persian-guide --clone=true
cd javascript-persian-guide
git remote -v
# origin    تو (fork)
# upstream  ریپوی اصلی

git fetch upstream
git switch main
git merge --ff-only upstream/main
git push origin main

قانون طلایی:

  • origin = ریپوی تو (حق push)
  • upstream = ریپوی صاحب پروژه (معمولاً read-only)
  • PR از origin/feat/x به upstream/main

در GitHub دکمهٔ Sync fork همین merge را گرافیکی می‌کند. در VS Code افزونهٔ PR ریموت‌ها را می‌شناسد.

🔁 مشارکت بدون fork — مدل تیمی

در سازمان، معمولاً مستقیم روی ریپو دسترسی write داری:

شاخه روی origin
git switch -c feat/docs origin/main
git push -u origin HEAD
gh pr create --base main

Fork برای OSS و پیمانکار خارجی است؛ برای همکار تمام‌وقت گام اضافه است.

سؤالات مصاحبه (با پاسخ)

Junior — فرق clone و download ZIP؟ ZIP بدون .git است؛ تاریخچه و شاخه ندارد.

Mid — چرا دو remote؟ تا بتوانی از upstream بگیر و به origin هل بدهی بدون حق نوشتن روی اصلی.

Senior — fork network چیست؟ گراف ریپوهای مشتق‌شده؛ GitHub objectها را تا حدی به اشتراک می‌گذارد. حذف fork تاریخچهٔ PR را پیچیده می‌کند.

✅ چک‌لیست فهم

  • clone با SSH انجام داده‌ای
  • origin/upstream را درست نام‌گذاری می‌کنی
  • Sync fork را قبل از PR تازه می‌زنی

فصل بعد: Pull Request سطح Senior.

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