راهنمای کامل کلون کردن ریپازیتوری GitHub با SSH (برای Windows / macOS / Linux)

راهنمای کامل کلون کردن ریپازیتوری GitHub با SSH

این راهنما شما را قدم‌به‌قدم برای کلون کردن هر ریپازیتوری از گیت‌هاب با استفاده از SSH راهنمایی می‌کند. با SSH، دیگر نیازی به وارد کردن رمز عبور در هر بار تعامل با سرور نخواهید داشت و امنیت اتصال شما نیز بالاتر می‌رود. مراحل را به ترتیب دنبال کنید.


۱) پیش‌نیازها

قبل از شروع، باید ابزارهای لازم را روی سیستم خود داشته باشید.

  • یک حساب کاربری در GitHub: اگر ندارید، به سادگی در GitHub.com ثبت‌نام کنید.
  • نصب Git: گیت نرم‌افزار اصلی برای کنترل نسخه است. آن را نصب کرده و از نصب صحیح آن مطمئن شوید.

نصب و بررسی نسخه Git:

  • Windows (در PowerShell):
    • ساده‌ترین راه استفاده از پکیج منیجر winget است:PowerShellwinget install --id Git.Git -e
    • سپس نسخه را چک کنید:PowerShellgit --version
    • (اگر winget را ندارید، می‌توانید از سایت رسمی Git for Windows آن را دانلود و نصب کنید.)
  • macOS (در Terminal):
    • ابتدا ابزارهای خط فرمان Xcode را نصب کنید (اگر قبلاً نصب نکرده‌اید):Bashxcode-select --install
    • اگر مدیر بسته Homebrew را دارید (که شدیداً توصیه می‌شود)، با این دستور گیت را نصب کنید:Bashbrew install git
    • نسخه را چک کنید:Bashgit --version
  • Linux (در Terminal):
    • بسته به توزیع لینوکس خود، یکی از دستورات زیر را اجرا کنید:Bash# برای توزیع‌های مبتنی بر Debian/Ubuntu sudo apt update && sudo apt install -y git # برای توزیع‌های مبتنی بر Fedora sudo dnf install -y git # برای توزیع‌های مبتنی بر Arch sudo pacman -S git
    • نسخه را چک کنید:Bashgit --version

تنظیم نام و ایمیل (فقط یک‌بار انجام می‌شود):

این اطلاعات به هر «کامیت» (Commit) شما ضمیمه می‌شود تا مشخص باشد چه کسی تغییرات را ایجاد کرده است. این کار برای استفاده از گیت ضروری است.

Bash

git config --global user.name "نام و نام‌خانوادگی شما"
git config --global user.email "ایمیلی-که-با-آن-در-گیتهاب-ثبت‌نام-کردید@example.com"

۲) ساخت و تنظیم کلید SSH 🔑

SSH چیست؟ تصور کنید SSH یک جفت کلید دیجیتال بسیار امن است: یک کلید عمومی (Public Key) و یک کلید خصوصی (Private Key).

  • کلید عمومی (.pub): مانند قفلی است که آن را روی در حساب GitHub خود نصب می‌کنید. می‌توانید این قفل را به هر کسی بدهید.
  • کلید خصوصی: کلید منحصر به فردی است که فقط شما دارید و روی کامپیوترتان باقی می‌ماند. این تنها کلیدی است که می‌تواند قفل بالا را باز کند. هرگز کلید خصوصی خود را با کسی به اشتراک نگذارید!

وقتی می‌خواهید به گیت‌هاب متصل شوید، گیت‌هاب با استفاده از قفل شما (کلید عمومی) یک چالش امنیتی می‌فرستد که فقط کامپیوتر شما با داشتن کلید خصوصی قادر به پاسخگویی به آن است. به این ترتیب هویت شما بدون نیاز به رمز عبور تأیید می‌شود.

۲.۱) ساخت جفت کلید

الگوریتم ed25519 مدرن‌تر، سریع‌تر و امن‌تر از RSA است و به عنوان انتخاب اول توصیه می‌شود.

  • در macOS / Linux (Terminal) یا Windows (PowerShell/Git Bash):Bashssh-keygen -t ed25519 -C "ایمیلی-که-با-آن-در-گیتهاب-ثبت‌نام-کردید@example.com"
    • -t ed25519: نوع کلید را مشخص می‌کند.
    • -C "your_email@example.com": یک کامنت برای شناسایی کلید اضافه می‌کند (معمولاً ایمیل).
    در حین ساخت کلید، از شما چند سوال پرسیده می‌شود:
    1. Enter a file in which to save the key: مسیر پیش‌فرض را با زدن Enter قبول کنید. کلیدها در پوشه‌ی ~/.ssh/ (در ویندوز: C:\Users\YOUR_USER\.ssh\) ساخته می‌شوند.
    2. Enter passphrase: یک گذرواژه برای کلید خود وارد کنید. این یک لایه امنیتی اضافه است. اگر کسی فایل کلید خصوصی شما را بدزدد، بدون این گذرواژه نمی‌تواند از آن استفاده کند. می‌توانید آن را خالی بگذارید، اما توصیه نمی‌شود.
    (اگر سیستم شما خیلی قدیمی است و از ed25519 پشتیبانی نمی‌کند، از RSA استفاده کنید: ssh-keygen -t rsa -b 4096 -C "your_email")

۲.۲) افزودن کلید به ssh-agent (برای بارگذاری خودکار)

ssh-agent چیست؟ یک برنامه کمکی است که کلید خصوصی شما را در حافظه نگه می‌دارد. با این کار، فقط یک‌بار (معمولاً بعد از ری‌استارت سیستم) گذرواژه (Passphrase) کلید خود را وارد می‌کنید و تا زمانی که سیستم روشن است، دیگر نیازی به وارد کردن مجدد آن برای git push یا git pull نخواهید داشت.

  • macOS / Linux:Basheval "$(ssh-agent -s)" # ایجنت را در پس‌زمینه اجرا می‌کند ssh-add ~/.ssh/id_ed25519 # کلید خصوصی را به ایجنت اضافه می‌کند
  • Windows (PowerShell):PowerShell# سرویس ssh-agent را طوری تنظیم می‌کند که با بالا آمدن ویندوز اجرا شود Get-Service ssh-agent | Set-Service -StartupType Automatic Start-Service ssh-agent # سرویس را همین الان اجرا می‌کند ssh-add $env:USERPROFILE\.ssh\id_ed25519

۲.۳) کپی کردن محتوای کلید عمومی برای GitHub

حالا باید محتوای فایل کلید عمومی (id_ed25519.pub) را کپی کنید تا در سایت گیت‌هاب قرار دهید.

  • macOS:Bashpbcopy < ~/.ssh/id_ed25519.pub
  • Linux (با ابزار xclip):Bash# اگر xclip نصب نیست: sudo apt install xclip یا sudo dnf install xclip xclip -sel clip < ~/.ssh/id_ed25519.pub (اگر xclip ندارید، محتوای فایل را با cat ~/.ssh/id_ed25519.pub نمایش داده و دستی کپی کنید.)
  • Windows (PowerShell):PowerShellGet-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard

۲.۴) افزودن کلید عمومی به حساب GitHub

  1. وارد حساب کاربری خود در GitHub.com شوید.
  2. روی عکس پروفایل خود در گوشه بالا سمت راست کلیک کرده و وارد Settings شوید.
  3. در منوی سمت چپ، روی SSH and GPG keys کلیک کنید.
  4. دکمه سبز New SSH key را بزنید.
  5. در فیلد Title، یک نام دلخواه برای این کلید بگذارید (مثلاً “My MacBook Pro” یا “Windows Desktop”).
  6. در فیلد بزرگ Key، محتوای کلید عمومی را که در مرحله قبل کپی کردید، Paste کنید.
  7. روی Add SSH key کلیک کنید.

۲.۵) تست اتصال SSH

این دستور بررسی می‌کند که آیا کامپیوتر شما می‌تواند با استفاده از کلید خصوصی‌اش با سرور گیت‌هاب ارتباط امن برقرار کند یا خیر.

Bash

ssh -T git@github.com
  • برای اولین بار: یک پیام امنیتی در مورد تأیید هویت هاست (github.com) مشاهده خواهید کرد. این طبیعی است. تایپ کنید yes و Enter را بزنید تا اثر انگشت سرور گیت‌هاب در لیست میزبان‌های شناخته‌شده شما (known_hosts) ذخیره شود.
  • نتیجه موفق: اگر همه چیز درست باشد، پیامی مشابه این خواهید دید:Hi USERNAME! You’ve successfully authenticated, but GitHub does not provide shell access.این پیام یعنی اتصال شما با موفقیت برقرار شد.

۳) کلون کردن هر ریپازیتوری

کلون کردن (Clone) چیست؟ این کار فقط دانلود فایل‌های پروژه نیست. کلون کردن یعنی شما یک کپی کامل و تمام‌عیار از کل تاریخچه پروژه، شامل تمام کامیت‌ها، شاخه‌ها (Branches) و تگ‌ها را روی کامپیوتر خود ایجاد می‌کنید. این یک ریپازیتوری محلی کاملاً مستقل است.

  1. به صفحه ریپازیتوری مورد نظر در گیت‌هاب بروید.
  2. روی دکمه سبز رنگ <> Code کلیک کنید.
  3. مطمئن شوید که تب SSH انتخاب شده است.
  4. آدرس نمایش داده شده را کپی کنید. این آدرس باید شبیه git@github.com:OWNER/REPO.git باشد.
  5. حالا ترمینال (یا PowerShell) را باز کرده و به پوشه‌ای بروید که می‌خواهید پروژه در آنجا ذخیره شود.Bash# به پوشه‌ی دلخواه خود بروید cd path/to/your/projects/folder # دستور کلون را با آدرس کپی شده اجرا کنید git clone git@github.com:OWNER/REPO.git # وارد پوشه‌ی پروژه شوید که به تازگی ساخته شده cd REPO تمام شد! پروژه اکنون روی کامپیوتر شماست.

جایگزین (استفاده از HTTPS – کمتر توصیه می‌شود):

اگر نخواهید از SSH استفاده کنید، می‌توانید از آدرس HTTPS کلون کنید:

git clone https://github.com/OWNER/REPO.git

نکته: اگر احراز هویت دو مرحله‌ای (2FA) روی حساب گیت‌هاب شما فعال باشد، هنگام استفاده از HTTPS نمی‌توانید از رمز عبور عادی خود استفاده کنید. در این حالت باید یک Personal Access Token (PAT) ساخته و از آن به جای رمز عبور استفاده کنید. به همین دلیل SSH روش بسیار راحت‌تری برای توسعه‌دهندگان است.


۴) گردش کار روزمره با ریپازیتوری

پس از کلون کردن، اینها دستورات رایجی هستند که هر روز استفاده خواهید کرد.

  • گرفتن آخرین تغییرات از سرور:Bashgit pull این دستور تغییراتی را که دیگران به ریپازیتوری روی گیت‌هاب فرستاده‌اند، دانلود و با نسخه محلی شما ادغام (Merge) می‌کند. همیشه قبل از شروع کار جدید، git pull را اجرا کنید.
  • ساخت یک شاخه (Branch) جدید برای کار جدید:Bashgit checkout -b feature/my-new-idea کار کردن روی شاخه‌های جداگانه یک اصل کلیدی در گیت است. این کار به شما اجازه می‌دهد تا روی یک ویژگی جدید کار کنید، بدون اینکه شاخه اصلی (main) را خراب کنید. نام شاخه را توصیفی انتخاب کنید.
  • افزودن و کامیت کردن تغییرات:
    1. تغییرات خود را در فایل‌ها ایجاد کنید.
    2. تغییرات را به «ناحیه آماده‌سازی» (Staging Area) اضافه کنید:Bashgit add . git add . تمام فایل‌های تغییر یافته در پوشه فعلی را برای کامیت شدن آماده می‌کند. کامیت مانند یک عکس فوری (Snapshot) از پروژه شما در یک نقطه زمانی خاص است.
    3. تغییرات آماده‌شده را کامیت کنید:Bashgit commit -m "یک توضیح کوتاه و واضح در مورد تغییرات" پیام کامیت باید خلاصه و معنادار باشد، مثلاً: “Add user authentication feature”.
  • ارسال (Push) شاخه خود به گیت‌هاب:
    • برای اولین بار که یک شاخه جدید را پوش می‌کنید، باید به گیت بگویید که این شاخه محلی به کدام شاخه در سرور (origin) متصل شود:Bashgit push -u origin feature/my-new-idea
    • برای دفعات بعدی که روی همین شاخه کامیت جدیدی ایجاد می‌کنید، فقط کافیست:Bashgit push
  • ساخت یک Pull Request (PR):بعد از پوش کردن شاخه، به صفحه ریپازیتوری در گیت‌هاب بروید. گیت‌هاب به طور خودکار شاخه جدید شما را تشخیص داده و یک دکمه زرد رنگ Compare & pull request را نمایش می‌دهد. با کلیک روی آن، می‌توانید یک درخواست رسمی برای ادغام تغییرات خود در شاخه اصلی (main) ایجاد کنید. اینجاست که همکاران شما کد را بازبینی کرده و نظر می‌دهند.

۵) انتقال (Push) یک پروژه محلی موجود به GitHub

اگر یک پروژه روی کامپیوتر خود دارید که هنوز گیت ندارد و می‌خواهید آن را به گیت‌هاب منتقل کنید:

  1. در گیت‌هاب یک ریپازیتوری خالی و جدید بسازید (تیک گزینه‌های Add a README file، .gitignore و license را نزنید).
  2. آدرس SSH ریپازیتوری جدید را کپی کنید.
  3. در ترمینال، به پوشه پروژه محلی خود بروید:Bashcd path/to/your/local-project # ۱. یک ریپازیتوری گیت جدید در این پوشه ایجاد کن git init # ۲. نام شاخه پیش‌فرض را به `main` تغییر بده (استاندارد جدید) git branch -M main # ۳. تمام فایل‌های پروژه را برای اولین کامیت آماده کن git add . git commit -m "Initial commit" # ۴. آدرس ریپازیتوری گیت‌هاب را به عنوان ریموت (با نام origin) اضافه کن git remote add origin git@github.com:USERNAME/NEW-REPO-NAME.git # ۵. شاخه main محلی را به ریموت origin پوش کن git push -u origin main

۶) استفاده از یک کلید برای همه ریپوها و پیکربندی پیشرفته

  • یک کلید برای همه: شما نیازی به ساخت کلید SSH جدید برای هر ریپازیتوری ندارید. همان یک کلید که به حساب گیت‌هاب خود اضافه کرده‌اید، برای تمام ریپازیتوری‌هایی که به آن‌ها دسترسی دارید، کار می‌کند.
  • پیکربندی پیشرفته با فایل config:برای مدیریت آسان‌تر کلیدها، به خصوص اگر چندین حساب (مثلاً شخصی و کاری) دارید، می‌توانید یک فایل کانفیگ برای SSH بسازید.
    • مسیر فایل:
      • macOS / Linux: ~/.ssh/config
      • Windows: %USERPROFILE%\.ssh\config (یا C:\Users\YOUR_USER\.ssh\config)
    • نمونه ساده برای یک حساب:Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519 AddKeysToAgent yes # این خط فقط برای macOS است و passphrase را در Keychain ذخیره می‌کند UseKeychain yes
    • نمونه برای مدیریت دو حساب گیت‌هاب (شخصی و کاری):فرض کنید دو کلید ساخته‌اید: id_ed25519_personal و id_ed25519_work.# حساب شخصی Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_ed25519_personal AddKeysToAgent yes # حساب کاری Host github-work HostName github.com User git IdentityFile ~/.ssh/id_ed25519_work AddKeysToAgent yes حالا برای کلون کردن ریپازیتوری کاری، آدرس را کمی تغییر می‌دهید:git clone git@github-work:COMPANY/WORK-REPO.gitSSH با دیدن github-work، به فایل کانفیگ مراجعه کرده و به طور خودکار از کلید مربوط به حساب کاری شما استفاده می‌کند!

۷) چک‌لیست سریع (برای هر بار کلون کردن)

  1. آیا Git نصب است؟ (git --version)
  2. آیا کلید SSH ساخته شده و در حساب GitHub من ثبت شده است؟ (این کار فقط یک‌بار انجام می‌شود)
  3. آیا تست اتصال (ssh -T git@github.com) با موفقیت انجام می‌شود؟
  4. آدرس SSH ریپازیتوری را از سایت گیت‌هاب کپی کن.
  5. در پوشه مقصد، دستور کلون را اجرا کن: git clone git@github.com:OWNER/REPO.git

۸) خطاهای رایج و راه‌حل‌ها 🐛

  • Permission denied (publickey):
    • راه‌حل ۱: کلید شما به ssh-agent اضافه نشده است. دستور ssh-add مربوط به سیستم‌عامل خود را دوباره اجرا کنید.
    • راه‌حل ۲: مطمئن شوید محتوای کلید عمومی (.pub) به درستی در بخش Settings > SSH and GPG keys در گیت‌هاب کپی شده است. یک حرف جابجا یا کم، اتصال را ناموفق می‌کند.
    • راه‌حل ۳ (برای Linux/macOS): دسترسی فایل‌های SSH باید محدود باشد. دستورات زیر را اجرا کنید:chmod 700 ~/.sshchmod 600 ~/.ssh/id_ed25519
  • Repository not found یا خطای 404:
    • آدرس URL را اشتباه وارد کرده‌اید. نام مالک یا نام ریپازیتوری را دوباره چک کنید.
    • شما به این ریپازیتوری (اگر خصوصی باشد) دسترسی ندارید.
  • fatal: not a git repository:
    • شما در پوشه درستی نیستید. دستورات گیت (مثل git pull, git status) باید از داخل پوشه پروژه اجرا شوند. ابتدا با cd REPO_NAME وارد آن شوید.
  • مشکل HTTPS با 2FA:
    • این خطا نشان می‌دهد که در حال استفاده از آدرس HTTPS هستید و 2FA فعال است. یا به استفاده از SSH (طبق این راهنما) روی بیاورید، یا یک Personal Access Token در گیت‌هاب ساخته و از آن به جای رمز عبور خود استفاده کنید.
  • خطای known_hosts در اولین اتصال:
    • این یک خطا نیست، بلکه یک هشدار امنیتی است. همانطور که گفته شد، yes را تایپ کنید تا اتصال برقرار شود.
  • مشکلات ناشی از پروکسی یا فایروال (معمولاً در شرکت‌ها):
    • اگر شبکه شما از پروکسی استفاده می‌کند، باید آن را برای گیت نیز تنظیم کنید:Bashgit config --global http.proxy http://USER:PASS@HOST:PORT git config --global https.proxy http://USER:PASS@HOST:PORT

پاسخ‌ها

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پاسخ‌ها

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

List Comprehensions در پایتون

List Comprehensions در پایتون

List Comprehensions در پایتون، یک روش سریع و موثر برای ایجاد لیست‌ها از طریق اعمال عملیات و فیلترها بر روی تکرارپذیرها (iterables) است. این ویژگی

تشخیص شماره موبایل با پایتون

تشخیص شماره موبایل در متن با پایتون

برای تشخیص شماره‌های تلفن همراه ایرانی، می‌توان از یک تابع پایتون استفاده کرد که از عبارت‌های باقاعده (Regular Expressions) برای شناسایی الگوی شماره‌های تلفن همراه