ارائه درخواست Pull در گیت هاب – به زبان ساده


در ادامه سلسله مطالب آموزش git در بلاگ فرادرس در این بخش به معرفی درخواستهای pull میپردازیم. تصور کنید کدهایی را در شاخه develop پروژه خود نوشتهاید و حالا که کار کدنویسی به پایان رسیده، میخواهید آن را در شاخه master پروژه ادغام کنید.
در این مرحله، ممکن است ندانید کدی که نوشتهاید به قدر کافی خوب است یا نه و بخواهید فردی کد شما را پیش از ادغام کردن در شاخه master مرور کند. این کار از طریق درخواست pull میسر است.
درخواست pull چیست؟
درخواست pull اختصاری برای عبارت «درخواست یک Git Pull» است. شاید درک عبارت فوق دشوار باشد، بنابراین آن را با یک مقایسه توضیح میدهیم. تصور کنید یک کارتن موز دارید که میخواهید آن را به کشتی بار بزنید. تنها روش برای بارگیری موزها این است که:
- از فردی بخواهید طنابی را از کشتی پایین بیندازد.
- طناب را به کارتن ببندید.
- آنها کارتن را بالا بکشند.
زمانی که آنها کارتن موزها را بالا میکشند، بررسی میکنند که آیا موزهای شما خوب هستند یا نه. این احتمال وجود دارد که از شما بخواهند برخی از موزهای خراب را با موزهای خوب جایگزین کنید. همچنین ممکن است فکر کنند که همه موزهای شما بهدردنخور هستند و تصمیم بگیرند که همه آنها را دور بریزند.
در این قیاس، کارتن موزها همان کد شما است که در شاخه develop قرار دارد. کشتی، شاخه master است. ملوانان داخل کشتی در این مثال افرادی هستند که کد شما را بررسی میکنند تا بدانند به اندازه کافی برای شاخه master خوب است یا نه.
این معنی درخواست pull است؛ یعنی فردی را مییابید که کد شما را بررسی کند و ببیند برای شاخه master مناسب است یا نه.
تنها تفاوت بین قیاس ما و یک درخواست pull واقعی این است که ما از کسی نمیخواهیم طنابی برای ما پایین بیندازد. ما طناب را داریم و میتوانیم موزها را در بندر به آن گره بزنیم و به کشتی ارسال کنیم. تنها کاری که ملوانهای روی کشتی باید انجام دهند، بررسی کیفیت موزها است. منظور از ارسال درخواست pull این است.
دو روش برای ارسال یک درخواست pull وجود دارد. این که از کدام روش استفاده شود، به این نکته وابسته است که شما دسترسی نوشتن دارید یا نه. پیش از ارسال درخواست pull باید تغییراتی ایجاد کنیم، از این رو ما چیزی داریم که باید ادغام شود. در این حالت باید یک عنوان به کد خود اضافه کنیم:
<!-- The code we're using to submit the pull request --> <h2>I'm a heading</h2>
این کد میبایست در شاخه develop کامیت شود. سپس میتوانید آن را به git ریموت، push کنید. این کد در بخش هایلایت شده تصویر زیر قابل مشاهده است:
اگر پیام را میبینید عالی است و کافی است روی آن کلیک کنید تا چند مرحله در کار جلو بیفتید.
اگر پیام را نمیبینید در این صورت باید روی برگه request tab در بخش فوقانی ریپازیتوری گیتهاب کلیک کنید:
سپس روی دکمه سبز رنگ با عنوان «new pull request» کلیک کنید.
اکنون به صفحهای میرسید که دارای عنوان «Compare Changes» است.
برای ایجاد یک درخواست pull باید شاخههای «مبنا» (base) و «مقایسه» (compare) را تعیین کنید:
- base: شاخهای که میخواهید در آن ادغام کنید.
- compare: شاخهای که میخواهید از آن ادغام کنید.
در مورد مثال خودمان میخواهیم در شاخه master ادغام کنیم و از این رو base را به صورت master تعیین میکنیم. ما از شاخه develop ادغام خواهیم کرد و از این رو compare را نیز برابر با develop تعیین میکنیم. زمانی که شاخهها را انتخاب کردید، گیتهاب فهرستی از کامیتهایی که ایجاد شدهاند را نمایش میدهد. در این فهرست کافی است روی دکمه «Create pull request» کلیک کنید.
گیتهاب صفحهای نشان میدهد که دارای عنوان «Open a pull request» است. دقت کنید که این همان صفحهای است که اگر پیام «Your branch has been updated X minutes ago» را قبلاً دیده بودید، به آن میرسیدید.
عنوانی که مینویسید همان عنوانی است که افراد در برگه pull request پروژه مشاهده خواهند کرد. ما قصد داریم آن را به صورت «Add a heading to the index» تعیین کنیم. این نظر، در بخش نظرات به عنوان نخستین مورد در زمان کلیک روی pull request دیده خواهد شد. در این مثال، پیام زیر را مینویسیم: «?I’ve added a heading. Let me know if its good»
زمانی که عنوان و پیام را وارد کردید، میتوانید روی دکمه Create pull request کلیک کنید تا در انتهای صفحه قرار گیرد. اینک اگر روی برگه pull request در بخش بالای صفحه کلیک کنید، میبینید که یک درخواست pull باز وجود دارد که ارسال شده است.
بدین ترتیب میتوانیم در صورت داشتن مجوز نوشتن در ریپازیتوری یک درخواست pull ایجاد کنیم. اما اگر مجوز نوشتن در ریپازیتوری نداشته باشیم، باید یک Fork ایجاد کنیم. در ادامه به توضیح مفهوم Fork میپردازیم.
Fork چیست؟
دقت کنید که فورک به معنی کلاینت گیت که مورد استفاده قرار میدهید نیست. فورک در Git به معنای یک ریپازیتوری است که بر مبنای ریپازیتوری دیگری ایجاد شده باشد. شما در مورد شاخهها (branches) اطلاعات دارید و میدانید که میتوان از یک شاخه، شاخه دیگری را ایجاد کرد. مثلاً از روی شاخه master یک شاخه develop ایجاد کرد.
به همین ترتیب میتوان از روی یک ریپازیتوری، ریپازیتوری دیگر ایجاد کرد. آن ریپازیتوری که از دیگری ایجاد میشود به نام فورک خوانده میشود. ریپازیتوری فورک شده شامل هر چیزی که در هنگام فورک شدن در ریپازیتوری اصلی قرار دارد، خواهد بود. از جمله شامل همه تگها و شاخهها است.
شما مالک ریپازیتوری فورک شده هستید و بدین ترتیب دسترسی نوشتن روی آن پیدا میکنید. این ریپازیتوری فورک شده همچنان در ریپازیتوری اصلی قابل ردگیری خواهد بود و میبایست از طریق این لینک ردگیری یک درخواست pull بدهید. شیوه عملی این کار را در ادامه بررسی میکنیم.
توجه داشته باشید که شما نمیتوانید ریپازیتوری خودتان را فورک کنید. ما از یک حساب ساختگی برای نشان دادن این وضعیت استفاده میکنیم. از این لحظه به بعد به این دو نام حساب توجه داشته باشید:
- حساب اصلی: zellwk
- حساب ساختگی: zellwk2
برای فورک کردن یک ریپازیتوری باید روی دکمه fork در بخش راست-بالای صفحه ریپازیتوری کلیک کنید.
زمانی که فرایند فورک تکمیل شد، شاهد یک ریپازیتوری خواهید بود که تقریباً شبیه ریپازیتوری اصلی فورک شده است. البته یک تفاوت وجود دارد و آن عنوان پروژه است که نشان میدهد این پروژه از یک ریپازیتوری دیگر فورک شده است. اینک شما در این ریپازیتوری فورک شده دسترسی نوشتن دارید.
مراحل ارسال درخواست pull از یک ریپازیتوری فورک شده به شرح زیر هستند:
- ایجاد یک شاخه جدید
- نوشتن کد در آن شاخه جدید
- ارسالی درخواست pull از شاخه جدید
ما در این راهنما اقدام به ساخت یک شاخه جدید نمیکنیم، زیرا یک حساب ساختگی روی کلاینت سیستم کنترل نسخه گیت داریم که یک میانبر محسوب میشود. بنابراین شاخه develop را مستقیماً مینویسیم و سپس یک درخواست pull از شاخه develop ارسال میکنیم. در این حالت یک فهرست با کد HTML زیر در فایل index.html اضافه میکنیم:
<ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li>
پیام کامیت برای این تغییر به صورت Add list است. اینک اگر به ریپازیتوری فورک شده بازگردیم، میبینیم که قادر به مشاهده دکمه «new pull request» هستیم. این دکمه در کنار دکمهای قرار دارد که برای سوئیچ بین شاخهها استفاده میشود.
روی این دکمه کلیک کنید تا یک درخواست جدید pull ایجاد شود. گیتهاب شما را به صفحهای میبرد که دارای عنوان «Open a new pull request» است. این صفحه ظاهری مانند صفحه «Open a new pull request» دارد که قبلاً مشاهده کردید.
تفاوت در این است که باید چهار چیز را تنظیم کنید:
- فورک base
- شاخه base
- فورک head
- شاخه compare
از مثال فوق دو نکته را میدانیم:
- شاخه base شاخهای است که میخواهیم در آن ادغام کنیم.
- شاخه compare شاخهای است که میخواهیم از آن ادغام کنیم.
این بدان معنی است که باید چهار مورد زیر را تعیین کنیم:
- فورک base: zellwk/project
- شاخه base: master
- فورک head: zellwk2/project
- شاخه compare: develop
اینک لازم است که عنوان و توضیح درخواست pull را نوشته و روی دکمه «New Pull Request» کلیک کنید.
بدین ترتیب یک درخواست جدید pull از ریپازیتوری فورک شده ارائه شده است.
سخن پایانی
هنگامی که یک درخواست pull ارائه میکنیم از یک فرد میخواهیم که تغییرات اعمال شده در کد را پیش از ادغام در یک شاخه بررسی کند. دو روش برای ایجاد درخواست pull وجود دارد که استفاده از هر کدام به داشتن یا نداشتن مجوز نوشتن در ریپازیتوری وابسته است. اگر مجوز نوشتن وجود داشته باشد، میتوان یک درخواست pull را از صفحه ریپازیتوری ارائه کرد. اگر مجوز نوشتن وجود نداشته باشد، باید ریپازیتوری را در صفحه خودتان فورک کنید و سپس از ریپازیتوری فورک شده یک درخواست pull ارائه دهید.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- راهنمای پیشرفته Git برای مبتدیان — به زبان ساده
- مجموعه آموزشهای مهندسی نرم افزار
- چگونه از گیت (Git) به طرز موثرتری استفاده کنیم؟ — به زبان ساده
- مفاهیم مقدماتی Git Merge و Git Rebase — به زبان ساده
==