صفحهٔ اصلی: تفاوت میان نسخهها
بدون خلاصۀ ویرایش |
بدون خلاصۀ ویرایش برچسب: برگرداندهشده |
||
| خط ۹: | خط ۹: | ||
* [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 = میزبانی و همکاری آنلاین | |||
``` | |||
نسخهٔ ۶ سپتامبر ۲۰۲۶، ساعت ۰۶:۰۸
مدیاویکی با موفقیت نصب شد.
برای اطلاعات بیشتر در مورد بهکارگیری نرمافزار ویکی به فهرست راهنمای کاربر مراجعه کنید.
آغاز به کار
- فهرست تنظیمات پیکربندی
- پرسشهای متداول مدیاویکی
- فهرست ایمیلی نسخههای مدیاویکی
- بومیسازی مدیاویکی برای زبان شما
- چگونگی مقابله با اسپم در ویکی خودتان را یاد بگیرید
- 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 = میزبانی و همکاری آنلاین ```