|
|
| خط ۹: |
خط ۹: |
| * [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 از دستور زیر استفاده میشود:
| |
|
| |
| git init
| |
|
| |
| بعد از اجرای این دستور، Git یک پوشه مخفی با نام .git ایجاد میکند.
| |
|
| |
| این پوشه اطلاعات مربوط به تاریخچه و تنظیمات Repository را نگهداری میکند.
| |
|
| |
| git status
| |
|
| |
| برای مشاهده وضعیت فعلی پروژه استفاده میشود:
| |
|
| |
| git status
| |
|
| |
| این دستور نشان میدهد:
| |
|
| |
| چه فایلهایی تغییر کردهاند
| |
| چه فایلهایی برای Commit آماده شدهاند
| |
| چه فایلهایی هنوز توسط Git دنبال نمیشوند
| |
| در حال حاضر روی چه Branchای قرار داریم
| |
| git add
| |
|
| |
| برای اضافه کردن تغییرات به مرحله آمادهسازی (Staging Area) استفاده میشود.
| |
|
| |
| برای اضافه کردن یک فایل:
| |
|
| |
| git add index.html
| |
|
| |
| برای اضافه کردن چند فایل:
| |
|
| |
| git add index.html style.css script.js
| |
|
| |
| برای اضافه کردن تمام تغییرات:
| |
|
| |
| git add .
| |
| git commit
| |
|
| |
| برای ثبت تغییرات آمادهشده در تاریخچه Git استفاده میشود:
| |
|
| |
| git commit -m "Add homepage"
| |
|
| |
| عبارت داخل -m توضیح کوتاهی درباره تغییرات Commit است.
| |
|
| |
| بهتر است پیام Commit کوتاه، واضح و مرتبط با تغییرات باشد.
| |
|
| |
| git log
| |
|
| |
| برای مشاهده تاریخچه Commitها استفاده میشود:
| |
|
| |
| git log
| |
|
| |
| برای نمایش خلاصهتر:
| |
|
| |
| git log --oneline
| |
|
| |
| مثلاً:
| |
|
| |
| a83f21a Add homepage
| |
| 52bc91d Fix navigation
| |
| 19ac742 Initial commit
| |
| کار با Branch
| |
| مشاهده Branchها
| |
|
| |
| برای مشاهده Branchهای موجود:
| |
|
| |
| git branch
| |
| ایجاد Branch جدید
| |
| git branch feature-login
| |
|
| |
| در این حالت یک Branch جدید ایجاد میشود.
| |
|
| |
| تغییر Branch
| |
| git switch feature-login
| |
|
| |
| همچنین در نسخههای قدیمیتر Git میتوان از دستور زیر استفاده کرد:
| |
|
| |
| git checkout feature-login
| |
| ایجاد و ورود همزمان به Branch
| |
| git switch -c feature-login
| |
|
| |
| این دستور یک Branch جدید ایجاد کرده و بلافاصله وارد آن میشود.
| |
|
| |
| حذف Branch
| |
| git branch -d feature-login
| |
|
| |
| اگر Branch هنوز Merge نشده باشد، Git ممکن است از حذف آن جلوگیری کند.
| |
|
| |
| اتصال Git به GitHub
| |
|
| |
| برای اتصال Repository محلی به یک Repository روی GitHub معمولاً ابتدا Remote اضافه میشود:
| |
|
| |
| git remote add origin https://github.com/USERNAME/REPOSITORY.git
| |
|
| |
| برای مشاهده Remoteهای موجود:
| |
|
| |
| git remote -v
| |
| ارسال تغییرات به Remote
| |
|
| |
| برای ارسال Branch به Repository آنلاین:
| |
|
| |
| git push origin main
| |
|
| |
| در بسیاری از پروژهها Branch اصلی با نام main است.
| |
|
| |
| برای اینکه Branch محلی برای Pushهای بعدی به Remote متصل شود:
| |
|
| |
| git push -u origin main
| |
|
| |
| پس از تنظیم اولیه، معمولاً میتوان از:
| |
|
| |
| git push
| |
|
| |
| استفاده کرد.
| |
|
| |
| دریافت تغییرات از Remote
| |
| git pull
| |
|
| |
| برای دریافت تغییرات جدید و ادغام آنها با Branch فعلی:
| |
|
| |
| git pull
| |
|
| |
| یا:
| |
|
| |
| git pull origin main
| |
| git fetch
| |
|
| |
| برای دریافت اطلاعات و تغییرات Remote بدون ادغام مستقیم آنها:
| |
|
| |
| git fetch
| |
|
| |
| تفاوت مهم این دو دستور این است که fetch تغییرات را دریافت میکند ولی آنها را به Branch فعلی Merge نمیکند؛ در حالی که pull معمولاً دریافت و ادغام تغییرات را با هم انجام میدهد.
| |
|
| |
| برگرداندن تغییرات
| |
| git restore
| |
|
| |
| اگر فایلی را تغییر دادهای ولی هنوز آن را Commit نکردهای، میتوانی تغییرات آن را کنار بگذاری:
| |
|
| |
| git restore index.html
| |
|
| |
| برای خارج کردن یک فایل از Staging Area:
| |
|
| |
| git restore --staged index.html
| |
| git revert
| |
|
| |
| برای ایجاد یک Commit جدید که اثر یک Commit قبلی را برعکس میکند:
| |
|
| |
| git revert COMMIT_ID
| |
|
| |
| این روش معمولاً برای برگرداندن تغییرات در پروژههایی که تاریخچه آنها به اشتراک گذاشته شده مناسبتر است.
| |
|
| |
| git reset
| |
|
| |
| git reset میتواند HEAD و وضعیت Staging را تغییر دهد.
| |
|
| |
| برای مثال:
| |
|
| |
| git reset HEAD~1
| |
|
| |
| این دستور آخرین Commit را از حالت Commit خارج میکند، در حالی که تغییرات فایلها باقی میمانند.
| |
|
| |
| دستور reset بهخصوص در حالتهای پیشرفته باید با دقت استفاده شود.
| |
|
| |
| مشاهده تفاوت تغییرات
| |
| git diff
| |
|
| |
| برای مشاهده تغییراتی که هنوز Commit نشدهاند:
| |
|
| |
| git diff
| |
|
| |
| برای مشاهده تفاوت بین دو Commit:
| |
|
| |
| git diff COMMIT1 COMMIT2
| |
| کار با فایلهای نادیده گرفتهشده
| |
|
| |
| گاهی نمیخواهیم بعضی فایلها وارد Repository شوند.
| |
|
| |
| برای این کار از فایل:
| |
|
| |
| .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 مدیریت کنیم.
| |
|
| |
| ابتدا وارد پوشه پروژه میشویم:
| |
|
| |
| cd my-website
| |
|
| |
| سپس Repository را ایجاد میکنیم:
| |
|
| |
| git init
| |
|
| |
| وضعیت پروژه را بررسی میکنیم:
| |
|
| |
| git status
| |
|
| |
| فایلها را به Staging اضافه میکنیم:
| |
|
| |
| git add .
| |
|
| |
| اولین Commit را ایجاد میکنیم:
| |
|
| |
| git commit -m "Initial website"
| |
|
| |
| حالا اگر فایل index.html را تغییر دهیم، میتوانیم تغییرات را مشاهده کنیم:
| |
|
| |
| git diff
| |
|
| |
| سپس تغییرات را ثبت میکنیم:
| |
|
| |
| git add index.html
| |
| git commit -m "Update homepage"
| |
|
| |
| به این ترتیب Git تاریخچه تغییرات سایت را نگهداری میکند.
| |
|
| |
| روند معمول کار با Git
| |
|
| |
| در بسیاری از پروژهها روند کار به شکل زیر است:
| |
|
| |
| تغییر فایلها
| |
| ↓
| |
| git status
| |
| ↓
| |
| git add
| |
| ↓
| |
| git commit
| |
| ↓
| |
| git push
| |
|
| |
| اگر پروژه دارای Repository آنلاین باشد، برای دریافت تغییرات جدید معمولاً ابتدا:
| |
|
| |
| git pull
| |
|
| |
| اجرا میشود.
| |
|
| |
| نکته مهم
| |
|
| |
| Git و GitHub یکی نیستند.
| |
|
| |
| Git یک سیستم کنترل نسخه است که روی کامپیوتر اجرا میشود.
| |
|
| |
| GitHub یک سرویس آنلاین برای میزبانی Repositoryهای Git و همکاری روی پروژههاست.
| |
|
| |
| به زبان ساده:
| |
|
| |
| Git = مدیریت نسخهها
| |
| GitHub = میزبانی و همکاری آنلاین
| |