مقدمه
در پروژههای نرمافزاری، مخصوصاً پروژههای متنباز (Open Source)، چندین توسعهدهنده به طور همزمان روی یک پروژه کار میکنند. برای مدیریت تغییرات کد و همکاری بین توسعهدهندگان از Git و GitHub استفاده میشود.
- Git یک سیستم کنترل نسخه (Version Control System) است.
- GitHub یک سرویس آنلاین برای نگهداری مخازن Git و همکاری تیمی است.
به کمک GitHub میتوان تغییرات را ثبت کرد، روی پروژههای دیگر مشارکت داشت و بدون ایجاد تداخل با کد اصلی، ویژگیهای جدید یا رفع اشکالها را پیادهسازی کرد.
Fork چیست؟
Fork به معنی ایجاد یک کپی کامل از مخزن (Repository) شخص دیگری در حساب GitHub خودمان است.
فرض کنید میخواهید در پروژه OCA یا Odoo مشارکت کنید اما اجازه نوشتن مستقیم روی مخزن اصلی را ندارید. در این حالت ابتدا از پروژه Fork میگیرید.
بعد از Fork:
- یک نسخه از پروژه داخل اکانت GitHub شما ایجاد میشود.
- میتوانید هر تغییری که خواستید روی آن انجام دهید.
- تغییرات شما روی پروژه اصلی تأثیری نخواهد داشت.
مثال
فرض کنید پروژه اصلی این است:
github.com/OCA/product-attribute
بعد از Fork، پروژه زیر برای شما ساخته میشود:
github.com/YourUsername/product-attribute
اکنون میتوانید آزادانه روی پروژه خود کار کنید.
چرا از Fork استفاده میکنیم؟
دلایل اصلی استفاده از Fork عبارتاند از:
- نداشتن دسترسی مستقیم به پروژه اصلی
- امکان توسعه مستقل
- جلوگیری از آسیب زدن به پروژه اصلی
- مشارکت در پروژههای Open Source
چگونه Fork انجام دهیم؟
۱. وارد صفحه پروژه در GitHub شوید.
۲. روی دکمه Fork کلیک کنید.
۳. GitHub یک نسخه از پروژه را داخل اکانت شما ایجاد میکند.
۴. سپس پروژه را Clone کنید:
git clone https://github.com/YourUsername/project.git
Clone چیست؟
Clone یعنی دانلود Repository روی کامپیوتر.
مثال:
git clone https://github.com/username/project.git
6. تفاوت Fork ، Clone و Branch
یک جدول بگذار:
| مفهوم | توضیح |
| Repository | پروژه روی GitHub |
| Fork | کپی Repository در اکانت GitHub شما |
| Clone | دانلود Repository روی کامپیوتر |
| Branch | شاخهای برای توسعه مستقل |
Pull Request چیست؟
بعد از اینکه تغییرات خود را روی Fork انجام دادید، باید از صاحبان پروژه بخواهید تغییرات شما را بررسی و در صورت تأیید وارد پروژه اصلی کنند.
به این درخواست Pull Request (PR) گفته میشود.
در واقع Pull Request یعنی:
"من تغییراتی انجام دادهام؛ لطفاً آنها را بررسی کنید و در صورت مناسب بودن به پروژه اصلی اضافه کنید."
Pull Request چه مراحلی دارد؟
فرآیند معمول به این شکل است:
- Fork گرفتن از پروژه
- Clone کردن Fork روی سیستم
- ایجاد Branch جدید
- اعمال تغییرات
- Commit کردن تغییرات
- Push کردن Branch به GitHub
- ایجاد Pull Request
- بررسی توسط Maintainer
- Merge شدن Pull Request در صورت تأیید
چگونه Pull Request ایجاد کنیم؟
بعد از انجام تغییرات؛
ابتدا فایلها را اضافه کنید:
git add .
سپس Commit بگیرید:
"git commit -m "Fix README typo
تغییرات را Push کنید:
git push origin my-feature
اکنون وارد GitHub شوید.
روی دکمه Compare & Pull Request کلیک کنید.
عنوان و توضیحات Pull Request را بنویسید.
در نهایت روی Create Pull Request کلیک کنید.
تفاوت Fork و Pull Request
| Fork | Pull Request |
| ایجاد یک نسخه از پروژه در حساب شخصی | درخواست اضافه شدن تغییرات به پروژه اصلی |
| قبل از شروع توسعه انجام میشود | بعد از پایان توسعه انجام میشود |
| یک کپی مستقل از پروژه ایجاد میکند | تغییرات را برای بررسی ارسال میکند |
| مالک پروژه اصلی تغییری نمیبیند | مالک پروژه تغییرات را بررسی میکند |
مثال کامل
فرض کنید میخواهید در پروژه OCA مشارکت کنید.
- پروژه را Fork میکنید.
- Fork را روی سیستم Clone میکنید.
- یک Branch جدید میسازید.
- باگ را برطرف میکنید.
- Commit میگیرید.
- تغییرات را Push میکنید.
- Pull Request ایجاد میکنید.
- Maintainer پروژه تغییرات را بررسی میکند.
- اگر همه چیز درست باشد، Pull Request Merge میشود و تغییرات شما وارد پروژه اصلی خواهد شد.
مزایای استفاده از Fork و Pull Request
- همکاری آسان بین توسعهدهندگان
- جلوگیری از تغییر مستقیم در پروژه اصلی
- امکان بررسی کیفیت کد قبل از Merge
- ثبت تاریخچه کامل تغییرات
- افزایش کیفیت پروژههای متنباز
جمع بندی
GitHub بستری برای همکاری تیمی و مدیریت پروژههای نرمافزاری است. زمانی که دسترسی مستقیم به یک مخزن نداریم، ابتدا از آن Fork میگیریم تا نسخهای مستقل در حساب خود داشته باشیم. پس از اعمال تغییرات، با ایجاد Pull Request از مدیران پروژه درخواست میکنیم که تغییرات ما را بررسی کرده و در صورت تأیید، به مخزن اصلی اضافه کنند. این فرآیند استاندارد همکاری در بسیاری از پروژههای متنباز مانند Odoo و OCA است و باعث میشود کیفیت کد حفظ شده و توسعه پروژه به صورت منظم و قابل کنترل انجام شود.