اشتراکها
در مطلب «نحوهی مشارکت در پروژههای GitHub به کمک Visual Studio» با مفهوم pull request آشنا شدیم. اما ... یک pull request خوب چه خصوصیاتی دارد و فرهنگ ارسال یک PR خوب چیست؟
اخلاق مشارکت در یک پروژهی سورس باز
بعضی از توسعه دهندهها در حین مشارکت در یک پروژهی سورس باز، برای مثال جهت افزودن قابلیتی جدید و یا رفع مشکلی، ابتدا سعی میکنند تا کدهای فعلی را برای خودشان «قابل فهمتر» کنند. این قابل فهمتر کردن پروژه، شامل تغییر نام متغیرها و متدهای فعلی، انتقال کدهای موجود به فایلهایی دیگر یا حتی یکی کردن چندین فایل با هم، مرتب سازی متدهای یک کلاس بر اساس حروف الفباء و امثال آن میشود.
این کارها را نباید در حین مشارکت و توسعهی پروژههای سورس باز دیگران انجام دهید! اگر هدفتان رفع مشکلی است یا افزودن قابلیتی جدید، باید نحوهی کدنویسی فعلی را حفظ کنید. از این جهت که نگهدارندهی اصلی پروژه، پیش از شما اینکار را شروع کردهاست و زمانیکه شما به پروژهای دیگر رجوع خواهید کرد، باز نیز باید همین کار را ادامه دهد.
اگر refactoring گستردهی شما به هر نحوی سبب بهبود پروژهی اصلی میشود، ابتدا این مورد را با مسئول اصلی پروژه مطرح کنید. اگر او قبول کرد، سپس اقدام به چنین کاری نمائید.
بحث در مورد تغییرات پیش از ارسال PR
قبل از اینکه PR ایی را ارسال کنید، بهتر است یک issue یا ticket جدید را باز کرده و در مورد آن بحث کنید یا توضیح دهید. در این حالت ممکن است توضیحات بهتری را در مورد سازگار سازی تغییرات خود با کدهای فعلی دریافت کنید.
Pull requestها را کوچک نگهدارید
برای اینکه شانس قبول شدن PR خود را بالا ببرید، حجم و تمرکز آنرا کوچک نگه دارید. بسیاری از توسعه دهندههای سورس باز اگر با یک PR حجیم روبرو شوند، آنرا رد میکنند چون مشکل اصلی، مدت زمان بالایی است که باید جهت بررسی این PR اختصاص داد. هرچقدر حجم آن بیشتر باشد، زمان بیشتری را خواهد برد.
فقط یک کار را انجام دهید
شبیه به اصل تک مسئولیتی کلاسها، یک PR نیز باید تنها یک کار را انجام دهد و بر روی یک موضوع خاص تمرکز داشته باشد. فرض کنید PR ایی را ارسال کردهاید که سه مشکل A، B و C را برطرف میکند. از دیدگاه مسئول اصلی پروژه، موارد A و C قابل قبول هستند؛ اما نه مورد C مطرح شده. در این حالت کل PR شما برگشت خواهد خورد. به همین جهت بهتر است بجای یک PR، سه PR مختلف و مجزا را جهت رفع مشکلات A، B و C ارسال کنید.
سازگاری تغییرات ارسالی را بررسی کنید
حداقل کاری را که پیش از ارسال PR باید انجام دهید این است که بررسی کنید آیا این تغییرات قابل Build هستند یا خیر. همچنین اگر پروژه دارای یک سری Unit tests است، حتما آنها را یکبار بررسی کنید تا مطمئن شوید جای دیگری را به هم نریختهاید. ضمنا وجود این تستها به صورت ضمنی به این معنا است که تغییرات جدید شما نیز باید به همراه تستهای مرتبطی باشند تا پذیرفته شوند.
PR ایی را بر روی شاخهی master ارسال نکنید
پس از اینکه یک fork از پروژهای سورس باز را ایجاد کردید و سپس آنرا clone نمودید تا به صورت Local بتوانید با آن کار کنید، فراموش نکنید که در همینجا باید یک branch و انشعاب جدید را جهت کار بر روی ویژگی مدنظر خود ایجاد کنید (برای مثال feature-X, fix-Y). بسیاری از پروژههای سورس باز به هیچ عنوان PRهای کار شدهی بر روی انشعاب master را قبول نمیکنند.
برای مطالعه بیشتر
Open Source Contribution Etiquette
ten tips for better Pull Requests
Getting a Pull Request Accepted
Optimize Your Pull-request
اخلاق مشارکت در یک پروژهی سورس باز
بعضی از توسعه دهندهها در حین مشارکت در یک پروژهی سورس باز، برای مثال جهت افزودن قابلیتی جدید و یا رفع مشکلی، ابتدا سعی میکنند تا کدهای فعلی را برای خودشان «قابل فهمتر» کنند. این قابل فهمتر کردن پروژه، شامل تغییر نام متغیرها و متدهای فعلی، انتقال کدهای موجود به فایلهایی دیگر یا حتی یکی کردن چندین فایل با هم، مرتب سازی متدهای یک کلاس بر اساس حروف الفباء و امثال آن میشود.
این کارها را نباید در حین مشارکت و توسعهی پروژههای سورس باز دیگران انجام دهید! اگر هدفتان رفع مشکلی است یا افزودن قابلیتی جدید، باید نحوهی کدنویسی فعلی را حفظ کنید. از این جهت که نگهدارندهی اصلی پروژه، پیش از شما اینکار را شروع کردهاست و زمانیکه شما به پروژهای دیگر رجوع خواهید کرد، باز نیز باید همین کار را ادامه دهد.
اگر refactoring گستردهی شما به هر نحوی سبب بهبود پروژهی اصلی میشود، ابتدا این مورد را با مسئول اصلی پروژه مطرح کنید. اگر او قبول کرد، سپس اقدام به چنین کاری نمائید.
بحث در مورد تغییرات پیش از ارسال PR
قبل از اینکه PR ایی را ارسال کنید، بهتر است یک issue یا ticket جدید را باز کرده و در مورد آن بحث کنید یا توضیح دهید. در این حالت ممکن است توضیحات بهتری را در مورد سازگار سازی تغییرات خود با کدهای فعلی دریافت کنید.
Pull requestها را کوچک نگهدارید
برای اینکه شانس قبول شدن PR خود را بالا ببرید، حجم و تمرکز آنرا کوچک نگه دارید. بسیاری از توسعه دهندههای سورس باز اگر با یک PR حجیم روبرو شوند، آنرا رد میکنند چون مشکل اصلی، مدت زمان بالایی است که باید جهت بررسی این PR اختصاص داد. هرچقدر حجم آن بیشتر باشد، زمان بیشتری را خواهد برد.
فقط یک کار را انجام دهید
شبیه به اصل تک مسئولیتی کلاسها، یک PR نیز باید تنها یک کار را انجام دهد و بر روی یک موضوع خاص تمرکز داشته باشد. فرض کنید PR ایی را ارسال کردهاید که سه مشکل A، B و C را برطرف میکند. از دیدگاه مسئول اصلی پروژه، موارد A و C قابل قبول هستند؛ اما نه مورد C مطرح شده. در این حالت کل PR شما برگشت خواهد خورد. به همین جهت بهتر است بجای یک PR، سه PR مختلف و مجزا را جهت رفع مشکلات A، B و C ارسال کنید.
سازگاری تغییرات ارسالی را بررسی کنید
حداقل کاری را که پیش از ارسال PR باید انجام دهید این است که بررسی کنید آیا این تغییرات قابل Build هستند یا خیر. همچنین اگر پروژه دارای یک سری Unit tests است، حتما آنها را یکبار بررسی کنید تا مطمئن شوید جای دیگری را به هم نریختهاید. ضمنا وجود این تستها به صورت ضمنی به این معنا است که تغییرات جدید شما نیز باید به همراه تستهای مرتبطی باشند تا پذیرفته شوند.
PR ایی را بر روی شاخهی master ارسال نکنید
پس از اینکه یک fork از پروژهای سورس باز را ایجاد کردید و سپس آنرا clone نمودید تا به صورت Local بتوانید با آن کار کنید، فراموش نکنید که در همینجا باید یک branch و انشعاب جدید را جهت کار بر روی ویژگی مدنظر خود ایجاد کنید (برای مثال feature-X, fix-Y). بسیاری از پروژههای سورس باز به هیچ عنوان PRهای کار شدهی بر روی انشعاب master را قبول نمیکنند.
برای مطالعه بیشتر
Open Source Contribution Etiquette
ten tips for better Pull Requests
Getting a Pull Request Accepted
Optimize Your Pull-request
اشتراکها
ایجاد Pull Requests از طریق VSCode
این خطا عنوان کرده که با فرمت استاندارد «ایجاد پروژهی «کتابخانه» توسط Angular CLI 6.0» سازگاری ندارد. بهتر است با توجه به سورس باز بودن پروژه، این فرمت خاص را ایجاد کنید و به عنوان یک pull request جدید ارسال نمائید:
نظرات مطالب
آشنایی با ساختار یک Pull Request خوب
یک منبع تکمیلی: GitHub Pull Request Checklist
اشتراکها
استفاده از GIT و GITHUB
نظرات اشتراکها
به روز رسانی فایل OPML وبلاگهای IT ایرانی؛ اردیبهشت 93
این فایل XML به روز شده، به صورت یک پروژهی سورس باز در GitHub قرار گرفت: IranianITBloggers
اگر فکر میکنید لینکی در آن نباید باشد و یا باید اضافه شود، آنرا به صورت یک pull request جدید ارسال کنید.
اگر فکر میکنید لینکی در آن نباید باشد و یا باید اضافه شود، آنرا به صورت یک pull request جدید ارسال کنید.
فرض کنید برای رفع باگی در پروژهای از GitHub، ایدهای دارید. روند کاری اعلام آن، روشهای مختلفی میتواند داشته باشند؛ از باز کردن یک Issue جدید تا فرستادن یک فایل zip و غیره. اما روش استاندارد مشارکت در پروژههای Git، ارسال یک PR یا Pull Request است. در ادامه نحوهی انجام اینکار را به کمک امکانات توکار VS.NET بررسی خواهیم کرد.
ایجاد یک Fork جدید در GitHub
برای ارسال تغییرات انجام شده بر روی یک پروژه، نیاز است به صاحب یا مسئول آن مخزن در GitHub مراجعه و سپس درخواست دسترسی اعمال تغییرات را نمود. در این حالت، احتمال اینکه جواب منفی دریافت کنید، بسیار زیاد است. جهت مدیریت یک چنین مواردی، قابلیتی به نام ایجاد یک Fork پیش بینی شدهاست.
در بالای هر مخزن کد در GitHub، یک دکمه به نام Fork موجود است. بر روی آن که کلیک کنید، یک کپی از آن پروژه را به مجموعهی مخزنهای کد شما در GitHub اضافه میکند. بدیهی است در این حالت، مجوز ارسال تغییرات خود را به GitHub و در اکانت خود خواهید داشت. نحوهی اطلاع رسانی این تغییرات به صاحب اصلی این مخزن کد، ارسال همان PR یا Pull Request است.
دریافت مخزن کد Fork شده از GitHub به کمک Visual Studio
پس از اینکه Fork جدیدی را از پروژهای موجود ایجاد کردیم، نیاز است یک Clone یا کپی مطابق اصل آنرا جهت اعمال تغییرات محلی، تهیه کنیم. برای اینکار VS.NET را گشوده و به برگهی Team Explorer آن که در کنار Solution Explorer قرار دارد، مراجعه کنید.
در اینجا بر روی دکمهی Connect در نوار ابزار آن، کلیک کرده و در صفحهی باز شده، بر روی لینک Clone کلیک نمائید. در اینجا میتوان آدرس مخزن کد Fork شده را جهت تهیه یک Clone مشخص کرد؛ به همراه محلی که قرار است این Clone در آن ذخیره شود.
آدرس HTTPS وارد شده، در کنار تمام مخازن کد GitHub قابل مشاهده هستند:
پس از تکمیل این دو آدرس، بر روی دکمهی Clone کلیک نمائید. پس از پایان کار، اگر به آدرس محلی داده شده بر روی کامپیوتر خود مراجعه کنید، یک کپی از فایلهای این مخزن، قابل مشاهده هستند.
اعمال تغییرات محلی و ارسال آن به سرور GitHub
در ادامه، این پروژهی جدید را در VS.NET باز کرده و تغییرات خود را اعمال کنید. اکنون نوبت به ارسال این تغییرات به سرور GitHub است. برای این منظور به برگهی Team Explorer مراجعه کرده و بر روی دکمهی Home آن کلیک کنید. سپس گزینهی Changes را انتخاب نمائید:
در اینجا توضیحاتی را نوشته و سپس بر روی دکمهی Commit کلیک کنید.
پس از هماهنگ سازی محلی، اکنون نوبت به هماهنگ سازی این تغییرات با مخزن کد GitHub است. بنابراین بر روی لینک Sync در پیام ظاهر شده کلیک کنید و در صفحهی بعدی نیز بر روی دکمهی Sync کلیک نمائید:
اکنون اگر به پروژهی GitHub خود مراجعه کنید، این تغییر جدید قابل مشاهدهاست:
مطلع سازی صاحب اصلی مخزن کد از تغییرات انجام شده
تا اینجا کسی از تغییرات جدید انجام شدهی توسط ما باخبر نیست. برای اطلاع رسانی در مورد این تغییرات، به مخزن کد Fork شده که اکنون تغییرات جدید به آن ارسال شدهاند، مراجعه کنید. سپس در کنار صفحه بر روی لینک Pull request کلیک نمائید:
در اینجا بر روی دکمهی New pull request کلیک کنید:
در ادامه تغییرات ارسال شما نمایش داده خواهند شد. آنها را بررسی کرده و مجددا بر روی دکمهی Create pull request کلیک کنید:
در اینجا عنوان و توضیحاتی را وارد کرده و سپس بر روی دکمهی Create pull request کلیک نمائید:
یکی سازی تغییرات با مخزن اصلی
اکنون صاحب اصلی مخزن کد یک ایمیل را دریافت خواهد کرد؛ همچنین اگر به مخزن کد خود مراجعه نماید، آمار Pull requests دریافتی قابل مشاهده است:
پس از انتخاب یکی از آنها، لینکی برای بررسی تغییرات انجام شده و همچنین دکمهای برای یکی سازی آنها با پروژهی اصلی وجود دارد:
دریافت این تغییرات در مخزن کد محلی توسط صاحب اصلی پروژه
اکنون که این تغییرات با پروژهی اصلی Merge و یکی شدهاند، صاحب اصلی پروژه جهت تهیهی یک کپی محلی و بهبود یا تغییر آنها میتواند به صورت ذیل عمل کند:
ابتدا به برگهی Team explorer مراجعه کرده و بر روی دکمهی Home آن کلیک کنید. سپس گزینهی Unsynced commits را انتخاب نمائید. در صفحهی باز شده بر روی دکمهی Sync کلیک نمائید. به این ترتیب آخرین تغییرات را از مخزن کد GitHub به صورت خودکار دریافت خواهید کرد:
ایجاد یک Fork جدید در GitHub
برای ارسال تغییرات انجام شده بر روی یک پروژه، نیاز است به صاحب یا مسئول آن مخزن در GitHub مراجعه و سپس درخواست دسترسی اعمال تغییرات را نمود. در این حالت، احتمال اینکه جواب منفی دریافت کنید، بسیار زیاد است. جهت مدیریت یک چنین مواردی، قابلیتی به نام ایجاد یک Fork پیش بینی شدهاست.
در بالای هر مخزن کد در GitHub، یک دکمه به نام Fork موجود است. بر روی آن که کلیک کنید، یک کپی از آن پروژه را به مجموعهی مخزنهای کد شما در GitHub اضافه میکند. بدیهی است در این حالت، مجوز ارسال تغییرات خود را به GitHub و در اکانت خود خواهید داشت. نحوهی اطلاع رسانی این تغییرات به صاحب اصلی این مخزن کد، ارسال همان PR یا Pull Request است.
دریافت مخزن کد Fork شده از GitHub به کمک Visual Studio
پس از اینکه Fork جدیدی را از پروژهای موجود ایجاد کردیم، نیاز است یک Clone یا کپی مطابق اصل آنرا جهت اعمال تغییرات محلی، تهیه کنیم. برای اینکار VS.NET را گشوده و به برگهی Team Explorer آن که در کنار Solution Explorer قرار دارد، مراجعه کنید.
در اینجا بر روی دکمهی Connect در نوار ابزار آن، کلیک کرده و در صفحهی باز شده، بر روی لینک Clone کلیک نمائید. در اینجا میتوان آدرس مخزن کد Fork شده را جهت تهیه یک Clone مشخص کرد؛ به همراه محلی که قرار است این Clone در آن ذخیره شود.
آدرس HTTPS وارد شده، در کنار تمام مخازن کد GitHub قابل مشاهده هستند:
پس از تکمیل این دو آدرس، بر روی دکمهی Clone کلیک نمائید. پس از پایان کار، اگر به آدرس محلی داده شده بر روی کامپیوتر خود مراجعه کنید، یک کپی از فایلهای این مخزن، قابل مشاهده هستند.
اعمال تغییرات محلی و ارسال آن به سرور GitHub
در ادامه، این پروژهی جدید را در VS.NET باز کرده و تغییرات خود را اعمال کنید. اکنون نوبت به ارسال این تغییرات به سرور GitHub است. برای این منظور به برگهی Team Explorer مراجعه کرده و بر روی دکمهی Home آن کلیک کنید. سپس گزینهی Changes را انتخاب نمائید:
در اینجا توضیحاتی را نوشته و سپس بر روی دکمهی Commit کلیک کنید.
پس از هماهنگ سازی محلی، اکنون نوبت به هماهنگ سازی این تغییرات با مخزن کد GitHub است. بنابراین بر روی لینک Sync در پیام ظاهر شده کلیک کنید و در صفحهی بعدی نیز بر روی دکمهی Sync کلیک نمائید:
اکنون اگر به پروژهی GitHub خود مراجعه کنید، این تغییر جدید قابل مشاهدهاست:
مطلع سازی صاحب اصلی مخزن کد از تغییرات انجام شده
تا اینجا کسی از تغییرات جدید انجام شدهی توسط ما باخبر نیست. برای اطلاع رسانی در مورد این تغییرات، به مخزن کد Fork شده که اکنون تغییرات جدید به آن ارسال شدهاند، مراجعه کنید. سپس در کنار صفحه بر روی لینک Pull request کلیک نمائید:
در اینجا بر روی دکمهی New pull request کلیک کنید:
در ادامه تغییرات ارسال شما نمایش داده خواهند شد. آنها را بررسی کرده و مجددا بر روی دکمهی Create pull request کلیک کنید:
در اینجا عنوان و توضیحاتی را وارد کرده و سپس بر روی دکمهی Create pull request کلیک نمائید:
یکی سازی تغییرات با مخزن اصلی
اکنون صاحب اصلی مخزن کد یک ایمیل را دریافت خواهد کرد؛ همچنین اگر به مخزن کد خود مراجعه نماید، آمار Pull requests دریافتی قابل مشاهده است:
پس از انتخاب یکی از آنها، لینکی برای بررسی تغییرات انجام شده و همچنین دکمهای برای یکی سازی آنها با پروژهی اصلی وجود دارد:
دریافت این تغییرات در مخزن کد محلی توسط صاحب اصلی پروژه
اکنون که این تغییرات با پروژهی اصلی Merge و یکی شدهاند، صاحب اصلی پروژه جهت تهیهی یک کپی محلی و بهبود یا تغییر آنها میتواند به صورت ذیل عمل کند:
ابتدا به برگهی Team explorer مراجعه کرده و بر روی دکمهی Home آن کلیک کنید. سپس گزینهی Unsynced commits را انتخاب نمائید. در صفحهی باز شده بر روی دکمهی Sync کلیک نمائید. به این ترتیب آخرین تغییرات را از مخزن کد GitHub به صورت خودکار دریافت خواهید کرد: