~/icsd.ir — bash
SYSTEM_ONLINE

آشنایی با Git و GitHub

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

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

Git چیست؟

Git یک سیستم کنترل نسخه توزیع‌شده (Distributed Version Control System – DVCS) است. به زبان ساده، Git ابزاری است که:

  • تاریخچه کامل تغییرات کد را نگه می‌دارد
  • اجازه می‌دهد به هر نسخه قبلی برگردید
  • به تیم اجازه می‌دهد همزمان روی یک پروژه کار کنند
  • تعارض‌ها را مدیریت می‌کند
  • اجازه می‌دهد چندین نسخه موازی (branch) از کد داشته باشید

تاریخچه کوتاه

در سال ۲۰۰۵، تیم Linux از سیستم BitKeeper استفاده می‌کرد که license رایگانش لغو شد. Linus Torvalds (خالق Linux) در عرض چند ماه Git را نوشت با اهداف:

  • سرعت بالا
  • طراحی توزیع‌شده
  • پشتیبانی از branching غیرخطی
  • قابلیت مدیریت پروژه‌های بزرگ مثل Linux kernel

متمرکز vs توزیع‌شده

قبل از Git، اکثر سیستم‌های کنترل نسخه (مثل SVN، CVS) متمرکز بودند:

Centralized (SVN):
        ┌─────────────┐
        │ Central     │  ← همه چیز اینجا
        │ Repository  │
        └──────┬──────┘
               │
       ┌───────┼───────┐
       │       │       │
    [Dev1] [Dev2] [Dev3]   ← فقط working copy

❌ بدون اتصال به سرور: نمی‌توان commit کرد
❌ سرور down: همه‌چیز متوقف
❌ تاریخچه کامل فقط روی سرور
Distributed (Git):
       ┌─────────────────┐
       │ Remote (GitHub) │
       └────────┬────────┘
                │
    ┌───────────┼───────────┐
    │           │           │
 [Dev1]     [Dev2]      [Dev3]
  ✓ کپی     ✓ کپی      ✓ کپی
  کامل      کامل       کامل

✓ هر developer تاریخچه کامل دارد
✓ بدون اتصال هم می‌توان commit کرد
✓ هر کلون یک backup کامل است

تفاوت Git و GitHub

این یکی از سوالات رایج است. اشتباه نکنید:

ویژگی Git GitHub
چیست؟ ابزار خط فرمان پلتفرم ابری
کجا اجرا می‌شود؟ روی کامپیوتر شما روی سرورهای GitHub Inc.
اولین انتشار ۲۰۰۵ توسط Linus Torvalds ۲۰۰۸ توسط Tom Preston-Werner و دیگران
مالکیت متن‌باز – بدون مالک مایکروسافت (از ۲۰۱۸)
نیاز به اینترنت؟ خیر بله
قابلیت‌های اضافه هیچ – فقط VCS Issues، Pull Requests، Actions، Pages، Wiki، Projects
هزینه کاملاً رایگان plan رایگان + plan‌های پولی
مقایسه ساده: Git مثل Microsoft Word روی کامپیوتر شماست. GitHub مثل Google Docs است که فایل‌ها را در ابر نگه می‌دارد و امکان همکاری اضافه می‌کند. می‌توانید Word داشته باشید بدون Google Docs، اما Google Docs بدون مفهوم “سند” معنی ندارد.

پلتفرم‌های مشابه GitHub

GitHub تنها میزبان Git نیست. گزینه‌های دیگر:

  • GitLab: محبوب‌ترین رقیب، self-hosted امکان‌پذیر، CI/CD قدرتمند
  • Bitbucket: محصول Atlassian، یکپارچه با Jira
  • Gitea: متن‌باز و سبک، self-hosted
  • Codeberg: غیرانتفاعی، مبتنی بر Gitea
  • Azure DevOps: مایکروسافت برای enterprise

در این دوره GitHub را یاد می‌گیریم چون پرکاربردترین است، اما مفاهیم Git در همه‌جا یکسان است.

نصب Git در Windows

روش ۱: Git for Windows (پیشنهاد)

  1. به git-scm.com/download/win بروید
  2. installer را دانلود کنید (نسخه 64-bit)
  3. setup را اجرا کنید با گزینه‌های پیش‌فرض
  4. در مرحله “Choosing the default editor”، Notepad++ یا VS Code انتخاب کنید (نه Vim!)
  5. در “Adjusting your PATH”، گزینه دوم را انتخاب کنید (Git from command line and 3rd-party software)
  6. در “HTTPS transport backend”، OpenSSL را انتخاب کنید
  7. در “Configuring the line ending”، گزینه اول (Checkout Windows-style, commit Unix-style)

پس از نصب، Git Bash در منوی Start خواهید داشت که terminal مخصوص Git است.

تست نصب

git --version
# git version 2.43.0.windows.1

نصب Git در Linux

# Ubuntu / Debian
sudo apt update
sudo apt install git

# Fedora / RHEL
sudo dnf install git

# Arch
sudo pacman -S git

# تست
git --version

نصب Git در macOS

# با Homebrew (پیشنهاد)
brew install git

# یا - در صورت نصب Xcode Command Line Tools خودکار
xcode-select --install

# تست
git --version

پیکربندی اولیه

اولین کاری که بعد از نصب Git باید انجام دهید: تنظیم نام و ایمیل. این اطلاعات در هر commit ثبت می‌شوند.

# تنظیم نام (در commit ها نمایش داده می‌شود)
git config --global user.name "Mohammad Ali Nazeri"

# تنظیم ایمیل (همان ایمیل GitHub)
git config --global user.email "you@example.com"

# تنظیم default branch به main (به‌جای master قدیمی)
git config --global init.defaultBranch main

# تنظیم editor پیش‌فرض
git config --global core.editor "code --wait"        # برای VS Code
git config --global core.editor "nano"                # یا nano
git config --global core.editor "notepad++"           # برای ویندوز

# نمایش رنگی خروجی
git config --global color.ui auto

# تنظیم line endings (مهم برای ویندوز)
git config --global core.autocrlf true                # ویندوز
git config --global core.autocrlf input               # Linux/Mac

# مشاهده تنظیمات فعلی
git config --list

# مشاهده یک تنظیم خاص
git config --global user.name

سطوح config

Git سه سطح پیکربندی دارد:

سطح دستور محل ذخیره کاربرد
System --system /etc/gitconfig همه کاربران
Global --global ~/.gitconfig یک کاربر، همه پروژه‌ها
Local --local .git/config فقط یک پروژه

اولویت: Local > Global > System

# مثال: ایمیل متفاوت برای پروژه کاری
cd /path/to/work-project
git config --local user.email "you@company.com"
# برای این پروژه از ایمیل کاری استفاده می‌شود

ساخت حساب GitHub

  1. به github.com بروید
  2. روی Sign up کلیک کنید
  3. ایمیل، رمز عبور و username انتخاب کنید (username بعداً در URL ریپازیتوری استفاده می‌شود)
  4. plan Free را انتخاب کنید (کافی است)
  5. ایمیل تأیید را بررسی کنید
  6. 2FA را فعال کنید – بسیار مهم برای امنیت!

نکات انتخاب username

  • کوتاه و حرفه‌ای – این URL پروفایل شماست
  • اسم واقعی یا handle شما – مثل github.com/manazeri
  • بدون اعداد عجیب یا کاراکتر خاص
  • یک‌بار انتخاب می‌کنید، بعداً تغییرش سخت است

ادغام با IDE

اگرچه Git ابزار خط فرمان است، اکثر IDE‌ها رابط گرافیکی برای آن دارند:

  • VS Code: Source Control panel در sidebar – عالی برای روزمره
  • JetBrains (PyCharm، IntelliJ، PhpStorm): integration بسیار قوی
  • GitHub Desktop: GUI رسمی GitHub – برای مبتدی‌ها
  • GitKraken: زیبا و قدرتمند، رایگان برای پروژه‌های public
  • Sourcetree: Atlassian، رایگان
توصیه: اول دستورات خط فرمان را یاد بگیرید. وقتی مفاهیم را فهمیدید، GUI کارها را سریع‌تر می‌کند. اگر فقط با GUI کار کنید، در مشکلات گیر می‌کنید.

اولین نگاه به یک ریپازیتوری Git

# تبدیل یک پوشه معمولی به Git repository
mkdir my-first-repo
cd my-first-repo
git init

# Initialized empty Git repository in /home/user/my-first-repo/.git/

# داخل پوشه نگاه کنید
ls -la
# . .. .git/

# پوشه .git محل نگهداری کل تاریخچه است
ls -la .git/
# HEAD  config  description  hooks/  info/  objects/  refs/

چیزی که داخل .git/ وجود دارد

  • HEAD: اشاره‌گر به branch فعلی
  • config: تنظیمات این repository
  • objects/: همه commit‌ها، فایل‌ها و tree‌ها (هسته Git)
  • refs/: پوینترها به branch‌ها و tag‌ها
  • hooks/: اسکریپت‌هایی که در رویدادها اجرا می‌شوند
هشدار: پوشه .git/ را هرگز دستی تغییر ندهید مگر اینکه دقیقاً بدانید چه می‌کنید. تمام دستورات Git این پوشه را مدیریت می‌کنند.

واژه‌نامه پایه

واژه معنی
Repository (Repo) یک پروژه Git – شامل کد و تاریخچه
Commit یک snapshot از پروژه در یک لحظه – مثل save
Branch یک خط زمانی موازی – برای کار روی فیچر بدون تأثیر روی main
Merge ادغام تغییرات یک branch به branch دیگر
Remote نسخه‌ای از repository روی سرور (مثل GitHub)
Clone کپی کردن یک remote repository روی سیستم خود
Push ارسال commit‌های local به remote
Pull دریافت تغییرات از remote
Fork کپی کردن یک repo دیگران در حساب خود (در GitHub)
Pull Request (PR) درخواست ادغام تغییرات شما در پروژه اصلی
Working Directory فایل‌هایی که در حال ویرایش هستید
Staging Area فایل‌هایی که آماده commit شده‌اند
HEAD اشاره به آخرین commit در branch فعلی

سه ناحیه Git

Git در هر لحظه فایل‌ها را در یکی از سه ناحیه نگه می‌دارد. این مفهوم را الان نخواهید فهمید کاملاً، اما در فصل بعد روشن می‌شود:

┌──────────────────┐    git add      ┌──────────────────┐
│ Working          │ ──────────────→ │ Staging Area     │
│ Directory        │                  │ (Index)          │
│ (فایل‌های شما)   │ ←──────────────  │                  │
└──────────────────┘                  └────────┬─────────┘
                                                │ git commit
                                                ▼
                                       ┌──────────────────┐
                                       │ Repository       │
                                       │ (.git/objects)   │
                                       │ تاریخچه دائمی    │
                                       └──────────────────┘

ناحیه‌ها به زبان ساده

  • Working Directory: فایل‌هایی که الان روی دیسک می‌بینید و ویرایش می‌کنید
  • Staging Area: لیستی از فایل‌هایی که “این‌ها را در commit بعدی شامل کن”
  • Repository: تاریخچه دائمی commit‌ها در پوشه .git

بهترین شیوه‌ها

  • همیشه نام و ایمیل را قبل از اولین commit تنظیم کنید
  • از همان ایمیل GitHub در git config استفاده کنید (تا commit‌ها به حساب شما متصل شوند)
  • 2FA را فعال کنید
  • username GitHub را با دقت انتخاب کنید
  • Git Bash را به‌جای CMD یا PowerShell در ویندوز استفاده کنید
  • یاد گرفتن CLI قبل از GUI

جمع‌بندی

  • Git یک سیستم کنترل نسخه توزیع‌شده است که Linus Torvalds در ۲۰۰۵ ساخت
  • GitHub پلتفرم ابری برای میزبانی Git است (نه خود Git)
  • Git در Windows/Linux/Mac قابل نصب است
  • قبل از استفاده، نام و ایمیل را با git config تنظیم کنید
  • Git سه ناحیه دارد: Working Directory، Staging Area و Repository
  • پوشه .git قلب هر repository است

در فصل بعد، اولین repository خود را می‌سازیم و دستورات پایه Git را تمرین می‌کنیم.

نمایش سایت

رنگ سایت
حالت نمایش
اندازهٔ متن
خوانایی

این تنظیمات فقط روی مرورگر شما ذخیره می‌شود.