آنچه در این مبحث می خوانید
گیت (Git) یک سیستم کنترل نسخه (Version Control System) متنباز است که اولین بار توسط لینوس توروالدز (خالق لینوکس) در سال ۲۰۰۵ ایجاد شد.
Git چیست؟
هدف گیت، ردیابی تغییرات در کد منبع پروژههاست تا توسعهدهندگان بتوانند:
- تغییرات را مشاهده و مدیریت کنند
- به نسخههای قبلی بازگردند
- بهصورت تیمی روی یک پروژه کار کنند بدون اینکه کدها روی هم نویسی شود
گیت برخلاف روشهای سنتی که نسخهها را بهصورت فایل جداگانه ذخیره میکردند، تغییرات را بهصورت تغییرات خطبهخط (snapshot-based) ذخیره میکند. همین ویژگی باعث سرعت، امنیت و کارایی بالای آن شده است.
🔹 کاربرد گیت
گیت در تمام مراحل توسعه نرمافزار کاربرد دارد. از مهمترین استفادههای گیت میتوان به موارد زیر اشاره کرد:
- مدیریت نسخهها: هر تغییر در کد بهصورت مستقل و با توضیح ثبت میشود.
- کار تیمی: چند نفر میتوانند همزمان روی یک پروژه کار کنند.
- رفع خطا و بازگشت به نسخه قبلی: اگر پس از تغییرات، باگ جدیدی ایجاد شود، بهراحتی میتوان به نسخه سالم بازگشت.
- انشعاب (Branching): توسعهدهندگان میتوانند شاخهای جدا برای ویژگی جدید بسازند و پس از اطمینان، آن را با نسخه اصلی ادغام کنند.
- پشتیبانگیری: از آنجا که گیت توزیعشده است، هر کلون (Clone) از مخزن یک نسخه کامل از کل پروژه را دارد.
🔹 گیتهاب (GitHub) چیست؟
گیتهاب (GitHub) یک سرویس آنلاین مبتنی بر گیت است که امکان میدهد مخازن (Repository) خود را در فضای ابری ذخیره کنید.
ویژگیهای کلیدی گیتهاب:
- میزبانی (Hosting) رایگان برای پروژههای متنباز
- مدیریت Issue و درخواستهای تغییر (Pull Request)
- همکاری تیمی و بررسی کد
- یکپارچگی با ابزارهایی مانند CI/CD
- دارای جامعه توسعهدهندگان گسترده که به اشتراکگذاری پروژهها میپردازند
در واقع، گیتهاب محیطی کاربرپسند در اختیار قرار میدهد تا بتوانید از قدرت گیت در فضای ابری بهرهمند شوید.
🔹 گیتلب (GitLab) چیست؟
گیتلب (GitLab) نیز مشابه گیتهاب، پلتفرمی برای مدیریت مخازن است؛ اما تمرکز بیشتری بر DevOps دارد.
ویژگیهای مهم گیتلب:
- امکان راهاندازی روی سرور شخصی
- ابزارهای داخلی برای CI/CD
- امکانات مدیریت پروژه، زمانبندی، و مانیتورینگ
- کنترل بیشتر بر روی دادهها و حریم خصوصی
گیتلب معمولاً توسط شرکتهایی استفاده میشود که نمیخواهند کدهایشان روی سرورهای خارجی (مثل GitHub) ذخیره شود.
🔹 تفاوت گیتهاب و گیتلب
| ویژگی | GitHub | GitLab |
|---|---|---|
| نوع میزبانی | ابری (Cloud) | قابل نصب در سرور شخصی |
| هدف اصلی | اشتراک و همکاری روی پروژهها | مدیریت کامل چرخه DevOps |
| CI/CD | باید از سرویسهای جداگانه استفاده کند (مثل GitHub Actions) | ابزار داخلی و قوی CI/CD دارد |
| سطح دسترسی | عمومی و خصوصی (در پلنهای مختلف) | عمومی و خصوصی، حتی در نسخه رایگان |
| جامعه کاربران | بسیار زیاد و فعال | کمتر اما متمرکز بر تیمهای سازمانی |
به طور خلاصه، گیتهاب برای همکاری عمومی و اشتراک دانش و گیتلب برای مدیریت و کنترل داخلی پروژهها مناسبتر است.
🔹 انواع دستورات پرکاربرد گیت
در گیت، دستورات متعددی وجود دارد، اما برخی از آنها در تمام پروژهها مشترک و ضروریاند. در ادامه چند دستور مهم همراه توضیح آورده شده است:
| دستور | کاربرد |
|---|---|
git init | ایجاد یک مخزن گیت جدید در پوشه فعلی |
git clone <address> | کلون کردن یک مخزن از سرور (مثل GitHub) |
git status | بررسی وضعیت فعلی فایلها (تغییر یافته یا Commit نشده) |
git add <file> | اضافه کردن فایلها به منطقه Stage برای کامیت بعدی |
git commit -m "message" | ثبت تغییرات با پیامی توضیحی |
git push | ارسال تغییرات به مخزن اصلی روی سرور |
git pull | دریافت آخرین تغییرات از سرور |
git branch | مشاهده یا ایجاد شاخههای جدید |
git merge | ادغام دو شاخه مختلف در یکدیگر |
git log | نمایش لیست کامیتها و تاریخچه تغییرات |
🔹 کامیت (Commit) چیست؟
کامیت در گیت به معنای ثبت رسمی تغییرات در پروژه است.
وقتی فایلی تغییر میکند و با git add به Stage اضافه شود، دستور git commit آن تغییر را ذخیره میکند.
هر کامیت شامل اطلاعات زیر است:
- نویسنده تغییرات
- تاریخ و زمان
- پیام توضیحی (
commit message) - شناسه یکتا (SHA-1 hash)
کامیتها در واقع نقاط بازگشت پروژه هستند که میتوانید در هر زمان به آنها برگردید.
🔹 ریپازیتوری (Repository) چیست؟
ریپازیتوری یا مخزن جایی است که همه فایلها و تاریخچه تغییرات پروژه نگهداری میشود.
دو نوع ریپازیتوری وجود دارد:
- Local Repository (محلی): روی سیستم خودتان است.
- Remote Repository (راه دور): روی سرورهایی مانند GitHub یا GitLab قرار دارد.
اتصال بین این دو از طریق دستوراتی مثل git push و git pull انجام میشود.
🔹 برنچ (Branch) چیست؟
برنچ به معنی شاخه است و برای توسعه ویژگیهای جدید بدون آسیب به نسخه اصلی (main یا master) استفاده میشود.
با git branch <branch-name> شاخه جدیدی ساخته میشود و با git checkout <branch-name> بین شاخهها جابهجا میشوید.
در نهایت با git merge میتوانید تغییرات شاخه فرعی را با شاخه اصلی ادغام کنید.
استفاده از برنچ باعث میشود:
- توسعه چند ویژگی بهصورت همزمان انجام شود
- کدهای ناقص روی نسخه اصلی تأثیر نگذارند
- تست و اشکالزدایی راحتتر انجام شود
🔹 کلید SSH در گیتهاب چیست؟
کلید SSH (Secure Shell) یک ارتباط رمزگذاریشده بین سیستم شما و سرور گیتهاب فراهم میکند.
به جای ورود با نام کاربری و رمزعبور، از کلید خصوصی (Private Key) در سیستم و کلید عمومی (Public Key) در اکانت گیتهاب استفاده میشود.
مزیتها:
- امنیت بالا
- سرعت بیشتر هنگام Push و Pull
- عدم نیاز به وارد کردن مکرر رمز
برای ایجاد آن از دستور زیر استفاده میشود:
ssh-keygen -t ed25519 -C "your_email@example.com"
سپس کلید عمومی را در تنظیمات گیتهاب اضافه میکنید.
🔹 SSH Agent چیست؟
SSH Agent برنامهای است که مدیریت کلیدهای SSH را بر عهده دارد. این ابزار کلید خصوصی کاربر را ذخیره میکند تا نیازی به وارد کردن رمز هر بار نباشد.
به زبان ساده، SSH Agent مانند یک “حافظه موقت ایمن” برای کلیدهای SSH شماست.
دستورات معمول برای استفاده:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
🧭 جمعبندی
گیت یکی از ابزارهای حیاتی در توسعه نرمافزار است. با استفاده از آن میتوانید کد خود را سازماندهی کنید، به راحتی با دیگران همکاری کنید، و از تاریخچه دقیق تغییرات پروژه بهره ببرید.
پلتفرمهایی مانند GitHub و GitLab فرآیند کار با گیت را سادهتر و حرفهایتر کردهاند و ابزارهای یکپارچهای برای توسعه مدرن فراهم میکنند.