این راهنما شما را قدمبهقدم برای کلون کردن هر ریپازیتوری از گیتهاب با استفاده از SSH راهنمایی میکند. با SSH، دیگر نیازی به وارد کردن رمز عبور در هر بار تعامل با سرور نخواهید داشت و امنیت اتصال شما نیز بالاتر میرود. مراحل را به ترتیب دنبال کنید.
۱) پیشنیازها
قبل از شروع، باید ابزارهای لازم را روی سیستم خود داشته باشید.
- یک حساب کاربری در GitHub: اگر ندارید، به سادگی در GitHub.com ثبتنام کنید.
- نصب Git: گیت نرمافزار اصلی برای کنترل نسخه است. آن را نصب کرده و از نصب صحیح آن مطمئن شوید.
نصب و بررسی نسخه Git:
- Windows (در PowerShell):
- سادهترین راه استفاده از پکیج منیجر
winget
است:PowerShellwinget install --id Git.Git -e
- سپس نسخه را چک کنید:PowerShell
git --version
- (اگر
winget
را ندارید، میتوانید از سایت رسمی Git for Windows آن را دانلود و نصب کنید.)
- سادهترین راه استفاده از پکیج منیجر
- macOS (در Terminal):
- ابتدا ابزارهای خط فرمان Xcode را نصب کنید (اگر قبلاً نصب نکردهاید):Bash
xcode-select --install
- اگر مدیر بسته Homebrew را دارید (که شدیداً توصیه میشود)، با این دستور گیت را نصب کنید:Bash
brew install git
- نسخه را چک کنید:Bash
git --version
- ابتدا ابزارهای خط فرمان Xcode را نصب کنید (اگر قبلاً نصب نکردهاید):Bash
- Linux (در Terminal):
- بسته به توزیع لینوکس خود، یکی از دستورات زیر را اجرا کنید:Bash
# برای توزیعهای مبتنی بر Debian/Ubuntu sudo apt update && sudo apt install -y git # برای توزیعهای مبتنی بر Fedora sudo dnf install -y git # برای توزیعهای مبتنی بر Arch sudo pacman -S git
- نسخه را چک کنید:Bash
git --version
- بسته به توزیع لینوکس خود، یکی از دستورات زیر را اجرا کنید:Bash
تنظیم نام و ایمیل (فقط یکبار انجام میشود):
این اطلاعات به هر «کامیت» (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):Bash
ssh-keygen -t ed25519 -C "ایمیلی-که-با-آن-در-گیتهاب-ثبتنام-کردید@example.com"
-t ed25519
: نوع کلید را مشخص میکند.-C "your_email@example.com"
: یک کامنت برای شناسایی کلید اضافه میکند (معمولاً ایمیل).
- Enter a file in which to save the key: مسیر پیشفرض را با زدن
Enter
قبول کنید. کلیدها در پوشهی~/.ssh/
(در ویندوز:C:\Users\YOUR_USER\.ssh\
) ساخته میشوند. - Enter passphrase: یک گذرواژه برای کلید خود وارد کنید. این یک لایه امنیتی اضافه است. اگر کسی فایل کلید خصوصی شما را بدزدد، بدون این گذرواژه نمیتواند از آن استفاده کند. میتوانید آن را خالی بگذارید، اما توصیه نمیشود.
ed25519
پشتیبانی نمیکند، از RSA استفاده کنید:ssh-keygen -t rsa -b 4096 -C "your_email"
)
۲.۲) افزودن کلید به ssh-agent (برای بارگذاری خودکار)
ssh-agent چیست؟ یک برنامه کمکی است که کلید خصوصی شما را در حافظه نگه میدارد. با این کار، فقط یکبار (معمولاً بعد از ریاستارت سیستم) گذرواژه (Passphrase) کلید خود را وارد میکنید و تا زمانی که سیستم روشن است، دیگر نیازی به وارد کردن مجدد آن برای git push
یا git pull
نخواهید داشت.
- macOS / Linux:Bash
eval "$(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:Bash
pbcopy < ~/.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):PowerShell
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard
۲.۴) افزودن کلید عمومی به حساب GitHub
- وارد حساب کاربری خود در GitHub.com شوید.
- روی عکس پروفایل خود در گوشه بالا سمت راست کلیک کرده و وارد Settings شوید.
- در منوی سمت چپ، روی SSH and GPG keys کلیک کنید.
- دکمه سبز New SSH key را بزنید.
- در فیلد Title، یک نام دلخواه برای این کلید بگذارید (مثلاً “My MacBook Pro” یا “Windows Desktop”).
- در فیلد بزرگ Key، محتوای کلید عمومی را که در مرحله قبل کپی کردید، Paste کنید.
- روی 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) و تگها را روی کامپیوتر خود ایجاد میکنید. این یک ریپازیتوری محلی کاملاً مستقل است.
- به صفحه ریپازیتوری مورد نظر در گیتهاب بروید.
- روی دکمه سبز رنگ <> Code کلیک کنید.
- مطمئن شوید که تب SSH انتخاب شده است.
- آدرس نمایش داده شده را کپی کنید. این آدرس باید شبیه
git@github.com:OWNER/REPO.git
باشد. - حالا ترمینال (یا 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 روش بسیار راحتتری برای توسعهدهندگان است.
۴) گردش کار روزمره با ریپازیتوری
پس از کلون کردن، اینها دستورات رایجی هستند که هر روز استفاده خواهید کرد.
- گرفتن آخرین تغییرات از سرور:Bash
git pull
این دستور تغییراتی را که دیگران به ریپازیتوری روی گیتهاب فرستادهاند، دانلود و با نسخه محلی شما ادغام (Merge) میکند. همیشه قبل از شروع کار جدید،git pull
را اجرا کنید. - ساخت یک شاخه (Branch) جدید برای کار جدید:Bash
git checkout -b feature/my-new-idea
کار کردن روی شاخههای جداگانه یک اصل کلیدی در گیت است. این کار به شما اجازه میدهد تا روی یک ویژگی جدید کار کنید، بدون اینکه شاخه اصلی (main
) را خراب کنید. نام شاخه را توصیفی انتخاب کنید. - افزودن و کامیت کردن تغییرات:
- تغییرات خود را در فایلها ایجاد کنید.
- تغییرات را به «ناحیه آمادهسازی» (Staging Area) اضافه کنید:Bash
git add .
git add .
تمام فایلهای تغییر یافته در پوشه فعلی را برای کامیت شدن آماده میکند. کامیت مانند یک عکس فوری (Snapshot) از پروژه شما در یک نقطه زمانی خاص است. - تغییرات آمادهشده را کامیت کنید:Bash
git commit -m "یک توضیح کوتاه و واضح در مورد تغییرات"
پیام کامیت باید خلاصه و معنادار باشد، مثلاً: “Add user authentication feature”.
- ارسال (Push) شاخه خود به گیتهاب:
- برای اولین بار که یک شاخه جدید را پوش میکنید، باید به گیت بگویید که این شاخه محلی به کدام شاخه در سرور (
origin
) متصل شود:Bashgit push -u origin feature/my-new-idea
- برای دفعات بعدی که روی همین شاخه کامیت جدیدی ایجاد میکنید، فقط کافیست:Bash
git push
- برای اولین بار که یک شاخه جدید را پوش میکنید، باید به گیت بگویید که این شاخه محلی به کدام شاخه در سرور (
- ساخت یک Pull Request (PR):بعد از پوش کردن شاخه، به صفحه ریپازیتوری در گیتهاب بروید. گیتهاب به طور خودکار شاخه جدید شما را تشخیص داده و یک دکمه زرد رنگ Compare & pull request را نمایش میدهد. با کلیک روی آن، میتوانید یک درخواست رسمی برای ادغام تغییرات خود در شاخه اصلی (main) ایجاد کنید. اینجاست که همکاران شما کد را بازبینی کرده و نظر میدهند.
۵) انتقال (Push) یک پروژه محلی موجود به GitHub
اگر یک پروژه روی کامپیوتر خود دارید که هنوز گیت ندارد و میخواهید آن را به گیتهاب منتقل کنید:
- در گیتهاب یک ریپازیتوری خالی و جدید بسازید (تیک گزینههای
Add a README file
،.gitignore
وlicense
را نزنید). - آدرس SSH ریپازیتوری جدید را کپی کنید.
- در ترمینال، به پوشه پروژه محلی خود بروید:Bash
cd 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
)
- macOS / Linux:
- نمونه ساده برای یک حساب:
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، به فایل کانفیگ مراجعه کرده و به طور خودکار از کلید مربوط به حساب کاری شما استفاده میکند!
- مسیر فایل:
۷) چکلیست سریع (برای هر بار کلون کردن)
- آیا Git نصب است؟ (
git --version
) - آیا کلید SSH ساخته شده و در حساب GitHub من ثبت شده است؟ (این کار فقط یکبار انجام میشود)
- آیا تست اتصال (
ssh -T git@github.com
) با موفقیت انجام میشود؟ - آدرس SSH ریپازیتوری را از سایت گیتهاب کپی کن.
- در پوشه مقصد، دستور کلون را اجرا کن:
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
را تایپ کنید تا اتصال برقرار شود.
- این یک خطا نیست، بلکه یک هشدار امنیتی است. همانطور که گفته شد،
- مشکلات ناشی از پروکسی یا فایروال (معمولاً در شرکتها):
- اگر شبکه شما از پروکسی استفاده میکند، باید آن را برای گیت نیز تنظیم کنید:Bash
git config --global http.proxy http://USER:PASS@HOST:PORT git config --global https.proxy http://USER:PASS@HOST:PORT
- اگر شبکه شما از پروکسی استفاده میکند، باید آن را برای گیت نیز تنظیم کنید:Bash
پاسخها