|
|
| (یک نسخهٔ میانیِ ایجادشده توسط همین کاربر نشان داده نشد) |
| خط ۹: |
خط ۹: |
| * [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources بومیسازی مدیاویکی برای زبان شما] | | * [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources بومیسازی مدیاویکی برای زبان شما] |
| * [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam چگونگی مقابله با اسپم در ویکی خودتان را یاد بگیرید] | | * [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam چگونگی مقابله با اسپم در ویکی خودتان را یاد بگیرید] |
| # Git
| |
|
| |
| ## Git چیست؟
| |
|
| |
| **Git** یک سیستم کنترل نسخه (Version Control System) است که برای مدیریت تغییرات فایلها و پروژهها استفاده میشود. Git به برنامهنویسان و تیمهای توسعه کمک میکند تا تغییرات پروژه را ثبت کنند، به نسخههای قبلی برگردند و همزمان روی یک پروژه کار کنند.
| |
|
| |
| Git بیشتر در پروژههای برنامهنویسی، طراحی سایت و توسعه نرمافزار استفاده میشود.
| |
|
| |
| ## Git چه کاربردی دارد؟
| |
|
| |
| مهمترین کاربردهای Git عبارتاند از:
| |
|
| |
| * ثبت تغییرات فایلها و پروژه
| |
| * مشاهده تاریخچه تغییرات
| |
| * بازگشت به نسخههای قبلی
| |
| * ایجاد شاخههای مختلف برای توسعه قابلیتهای جدید
| |
| * ادغام تغییرات چند شاخه
| |
| * همکاری چند نفر روی یک پروژه
| |
| * اتصال پروژه به سرویسهایی مانند GitHub، GitLab و Bitbucket
| |
| * نگهداری نسخههای مختلف یک پروژه
| |
|
| |
| ---
| |
|
| |
| # مفاهیم اصلی Git
| |
|
| |
| قبل از یادگیری دستورات Git بهتر است چند مفهوم اصلی را بشناسیم.
| |
|
| |
| ### Repository
| |
|
| |
| مخزن یا **Repository** محلی است که Git اطلاعات مربوط به پروژه و تاریخچه تغییرات آن را نگهداری میکند.
| |
|
| |
| یک Repository میتواند روی کامپیوتر یا روی سرویسهایی مانند GitHub قرار داشته باشد.
| |
|
| |
| ### Commit
| |
|
| |
| هر بار که مجموعهای از تغییرات را در Git ثبت میکنیم، یک **Commit** ایجاد میشود.
| |
|
| |
| هر Commit مانند یک نقطه در تاریخچه پروژه است و میتوان اطلاعات تغییرات انجامشده را در آن مشاهده کرد.
| |
|
| |
| ### Branch
| |
|
| |
| **Branch** یا شاخه به ما اجازه میدهد بدون تغییر مستقیم نسخه اصلی پروژه، روی یک قابلیت یا تغییر جدید کار کنیم.
| |
|
| |
| برای مثال میتوان یک Branch برای توسعه قابلیت جدید و یک Branch برای نسخه اصلی پروژه داشت.
| |
|
| |
| ### Merge
| |
|
| |
| از **Merge** برای ترکیب تغییرات یک Branch با Branch دیگر استفاده میشود.
| |
|
| |
| ### Remote
| |
|
| |
| Remote به یک Repository که در یک محل دیگر، معمولاً روی اینترنت، قرار دارد گفته میشود.
| |
|
| |
| برای مثال Repository موجود در GitHub میتواند Remote پروژه محلی ما باشد.
| |
|
| |
| ---
| |
|
| |
| # دستورات پایه Git
| |
|
| |
| ## git init
| |
|
| |
| برای تبدیل یک پوشه به Repository از دستور زیر استفاده میشود:
| |
|
| |
| ```bash
| |
| git init
| |
| ```
| |
|
| |
| بعد از اجرای این دستور، Git یک پوشه مخفی با نام `.git` ایجاد میکند.
| |
|
| |
| این پوشه اطلاعات مربوط به تاریخچه و تنظیمات Repository را نگهداری میکند.
| |
|
| |
| ---
| |
|
| |
| ## git status
| |
|
| |
| برای مشاهده وضعیت فعلی پروژه استفاده میشود:
| |
|
| |
| ```bash
| |
| git status
| |
| ```
| |
|
| |
| این دستور نشان میدهد:
| |
|
| |
| * چه فایلهایی تغییر کردهاند
| |
| * چه فایلهایی برای Commit آماده شدهاند
| |
| * چه فایلهایی هنوز توسط Git دنبال نمیشوند
| |
| * در حال حاضر روی چه Branchای قرار داریم
| |
|
| |
| ---
| |
|
| |
| ## git add
| |
|
| |
| برای اضافه کردن تغییرات به مرحله آمادهسازی (Staging Area) استفاده میشود.
| |
|
| |
| برای اضافه کردن یک فایل:
| |
|
| |
| ```bash
| |
| git add index.html
| |
| ```
| |
|
| |
| برای اضافه کردن چند فایل:
| |
|
| |
| ```bash
| |
| git add index.html style.css script.js
| |
| ```
| |
|
| |
| برای اضافه کردن تمام تغییرات:
| |
|
| |
| ```bash
| |
| git add .
| |
| ```
| |
|
| |
| ---
| |
|
| |
| ## git commit
| |
|
| |
| برای ثبت تغییرات آمادهشده در تاریخچه Git استفاده میشود:
| |
|
| |
| ```bash
| |
| git commit -m "Add homepage"
| |
| ```
| |
|
| |
| عبارت داخل `-m` توضیح کوتاهی درباره تغییرات Commit است.
| |
|
| |
| بهتر است پیام Commit کوتاه، واضح و مرتبط با تغییرات باشد.
| |
|
| |
| ---
| |
|
| |
| ## git log
| |
|
| |
| برای مشاهده تاریخچه Commitها استفاده میشود:
| |
|
| |
| ```bash
| |
| git log
| |
| ```
| |
|
| |
| برای نمایش خلاصهتر:
| |
|
| |
| ```bash
| |
| git log --oneline
| |
| ```
| |
|
| |
| مثلاً:
| |
|
| |
| ```text
| |
| a83f21a Add homepage
| |
| 52bc91d Fix navigation
| |
| 19ac742 Initial commit
| |
| ```
| |
|
| |
| ---
| |
|
| |
| # کار با Branch
| |
|
| |
| ## مشاهده Branchها
| |
|
| |
| برای مشاهده Branchهای موجود:
| |
|
| |
| ```bash
| |
| git branch
| |
| ```
| |
|
| |
| ---
| |
|
| |
| ## ایجاد Branch جدید
| |
|
| |
| ```bash
| |
| git branch feature-login
| |
| ```
| |
|
| |
| در این حالت یک Branch جدید ایجاد میشود.
| |
|
| |
| ---
| |
|
| |
| ## تغییر Branch
| |
|
| |
| ```bash
| |
| git switch feature-login
| |
| ```
| |
|
| |
| همچنین در نسخههای قدیمیتر Git میتوان از دستور زیر استفاده کرد:
| |
|
| |
| ```bash
| |
| git checkout feature-login
| |
| ```
| |
|
| |
| ---
| |
|
| |
| ## ایجاد و ورود همزمان به Branch
| |
|
| |
| ```bash
| |
| git switch -c feature-login
| |
| ```
| |
|
| |
| این دستور یک Branch جدید ایجاد کرده و بلافاصله وارد آن میشود.
| |
|
| |
| ---
| |
|
| |
| ## حذف Branch
| |
|
| |
| ```bash
| |
| git branch -d feature-login
| |
| ```
| |
|
| |
| اگر Branch هنوز Merge نشده باشد، Git ممکن است از حذف آن جلوگیری کند.
| |
|
| |
| ---
| |
|
| |
| # اتصال Git به GitHub
| |
|
| |
| برای اتصال Repository محلی به یک Repository روی GitHub معمولاً ابتدا Remote اضافه میشود:
| |
|
| |
| ```bash
| |
| git remote add origin https://github.com/USERNAME/REPOSITORY.git
| |
| ```
| |
|
| |
| برای مشاهده Remoteهای موجود:
| |
|
| |
| ```bash
| |
| git remote -v
| |
| ```
| |
|
| |
| ---
| |
|
| |
| # ارسال تغییرات به Remote
| |
|
| |
| برای ارسال Branch به Repository آنلاین:
| |
|
| |
| ```bash
| |
| git push origin main
| |
| ```
| |
|
| |
| در بسیاری از پروژهها Branch اصلی با نام `main` است.
| |
|
| |
| برای اینکه Branch محلی برای Pushهای بعدی به Remote متصل شود:
| |
|
| |
| ```bash
| |
| git push -u origin main
| |
| ```
| |
|
| |
| پس از تنظیم اولیه، معمولاً میتوان از:
| |
|
| |
| ```bash
| |
| git push
| |
| ```
| |
|
| |
| استفاده کرد.
| |
|
| |
| ---
| |
|
| |
| # دریافت تغییرات از Remote
| |
|
| |
| ## git pull
| |
|
| |
| برای دریافت تغییرات جدید و ادغام آنها با Branch فعلی:
| |
|
| |
| ```bash
| |
| git pull
| |
| ```
| |
|
| |
| یا:
| |
|
| |
| ```bash
| |
| git pull origin main
| |
| ```
| |
|
| |
| ---
| |
|
| |
| ## git fetch
| |
|
| |
| برای دریافت اطلاعات و تغییرات Remote بدون ادغام مستقیم آنها:
| |
|
| |
| ```bash
| |
| git fetch
| |
| ```
| |
|
| |
| تفاوت مهم این دو دستور این است که `fetch` تغییرات را دریافت میکند ولی آنها را به Branch فعلی Merge نمیکند؛ در حالی که `pull` معمولاً دریافت و ادغام تغییرات را با هم انجام میدهد.
| |
|
| |
| ---
| |
|
| |
| # برگرداندن تغییرات
| |
|
| |
| ## git restore
| |
|
| |
| اگر فایلی را تغییر دادهای ولی هنوز آن را Commit نکردهای، میتوانی تغییرات آن را کنار بگذاری:
| |
|
| |
| ```bash
| |
| git restore index.html
| |
| ```
| |
|
| |
| برای خارج کردن یک فایل از Staging Area:
| |
|
| |
| ```bash
| |
| git restore --staged index.html
| |
| ```
| |
|
| |
| ---
| |
|
| |
| ## git revert
| |
|
| |
| برای ایجاد یک Commit جدید که اثر یک Commit قبلی را برعکس میکند:
| |
|
| |
| ```bash
| |
| git revert COMMIT_ID
| |
| ```
| |
|
| |
| این روش معمولاً برای برگرداندن تغییرات در پروژههایی که تاریخچه آنها به اشتراک گذاشته شده مناسبتر است.
| |
|
| |
| ---
| |
|
| |
| ## git reset
| |
|
| |
| `git reset` میتواند HEAD و وضعیت Staging را تغییر دهد.
| |
|
| |
| برای مثال:
| |
|
| |
| ```bash
| |
| git reset HEAD~1
| |
| ```
| |
|
| |
| این دستور آخرین Commit را از حالت Commit خارج میکند، در حالی که تغییرات فایلها باقی میمانند.
| |
|
| |
| دستور `reset` بهخصوص در حالتهای پیشرفته باید با دقت استفاده شود.
| |
|
| |
| ---
| |
|
| |
| # مشاهده تفاوت تغییرات
| |
|
| |
| ## git diff
| |
|
| |
| برای مشاهده تغییراتی که هنوز Commit نشدهاند:
| |
|
| |
| ```bash
| |
| git diff
| |
| ```
| |
|
| |
| برای مشاهده تفاوت بین دو Commit:
| |
|
| |
| ```bash
| |
| git diff COMMIT1 COMMIT2
| |
| ```
| |
|
| |
| ---
| |
|
| |
| # کار با فایلهای نادیده گرفتهشده
| |
|
| |
| گاهی نمیخواهیم بعضی فایلها وارد Repository شوند.
| |
|
| |
| برای این کار از فایل:
| |
|
| |
| ```text
| |
| .gitignore
| |
| ```
| |
|
| |
| استفاده میشود.
| |
|
| |
| برای مثال:
| |
|
| |
| ```gitignore
| |
| node_modules/
| |
| .env
| |
| *.log
| |
| ```
| |
|
| |
| در این مثال:
| |
|
| |
| * پوشه `node_modules` نادیده گرفته میشود.
| |
| * فایل `.env` نادیده گرفته میشود.
| |
| * فایلهای دارای پسوند `.log` نادیده گرفته میشوند.
| |
|
| |
| ---
| |
|
| |
| # دستورات مهم Git در یک جدول
| |
|
| |
| | دستور | کاربرد |
| |
| | ------------- | -------------------------------- |
| |
| | `git init` | ایجاد Repository |
| |
| | `git status` | مشاهده وضعیت پروژه |
| |
| | `git add` | اضافه کردن تغییرات به Staging |
| |
| | `git commit` | ثبت تغییرات |
| |
| | `git log` | مشاهده تاریخچه |
| |
| | `git branch` | مدیریت Branchها |
| |
| | `git switch` | تغییر Branch |
| |
| | `git merge` | ادغام Branchها |
| |
| | `git remote` | مدیریت Remote |
| |
| | `git clone` | کپی کردن یک Repository |
| |
| | `git push` | ارسال تغییرات به Remote |
| |
| | `git pull` | دریافت و ادغام تغییرات |
| |
| | `git fetch` | دریافت اطلاعات Remote بدون Merge |
| |
| | `git diff` | مشاهده تفاوت تغییرات |
| |
| | `git restore` | برگرداندن تغییرات فایل |
| |
| | `git revert` | معکوس کردن یک Commit |
| |
| | `git reset` | تغییر وضعیت Commit/Stage |
| |
| | `git tag` | ایجاد Tag برای نسخهها |
| |
|
| |
| ---
| |
|
| |
| # یک مثال عملی
| |
|
| |
| فرض کنید یک سایت HTML ساختهایم و میخواهیم آن را با Git مدیریت کنیم.
| |
|
| |
| ابتدا وارد پوشه پروژه میشویم:
| |
|
| |
| ```bash
| |
| cd my-website
| |
| ```
| |
|
| |
| سپس Repository را ایجاد میکنیم:
| |
|
| |
| ```bash
| |
| git init
| |
| ```
| |
|
| |
| وضعیت پروژه را بررسی میکنیم:
| |
|
| |
| ```bash
| |
| git status
| |
| ```
| |
|
| |
| فایلها را به Staging اضافه میکنیم:
| |
|
| |
| ```bash
| |
| git add .
| |
| ```
| |
|
| |
| اولین Commit را ایجاد میکنیم:
| |
|
| |
| ```bash
| |
| git commit -m "Initial website"
| |
| ```
| |
|
| |
| حالا اگر فایل `index.html` را تغییر دهیم، میتوانیم تغییرات را مشاهده کنیم:
| |
|
| |
| ```bash
| |
| git diff
| |
| ```
| |
|
| |
| سپس تغییرات را ثبت میکنیم:
| |
|
| |
| ```bash
| |
| git add index.html
| |
| git commit -m "Update homepage"
| |
| ```
| |
|
| |
| به این ترتیب Git تاریخچه تغییرات سایت را نگهداری میکند.
| |
|
| |
| ---
| |
|
| |
| # روند معمول کار با Git
| |
|
| |
| در بسیاری از پروژهها روند کار به شکل زیر است:
| |
|
| |
| ```text
| |
| تغییر فایلها
| |
| ↓
| |
| git status
| |
| ↓
| |
| git add
| |
| ↓
| |
| git commit
| |
| ↓
| |
| git push
| |
| ```
| |
|
| |
| اگر پروژه دارای Repository آنلاین باشد، برای دریافت تغییرات جدید معمولاً ابتدا:
| |
|
| |
| ```bash
| |
| git pull
| |
| ```
| |
|
| |
| اجرا میشود.
| |
|
| |
| ---
| |
|
| |
| # نکته مهم
| |
|
| |
| Git و GitHub یکی نیستند.
| |
|
| |
| **Git** یک سیستم کنترل نسخه است که روی کامپیوتر اجرا میشود.
| |
|
| |
| **GitHub** یک سرویس آنلاین برای میزبانی Repositoryهای Git و همکاری روی پروژههاست.
| |
|
| |
| به زبان ساده:
| |
|
| |
| ```text
| |
| Git = مدیریت نسخهها
| |
| GitHub = میزبانی و همکاری آنلاین
| |
| ```
| |