امروزه تعداد کسانی که کارهای متن باز انجام می دهند بسیار افزایش پیدا کرده است. حتی گاهی افراد هر هفته یک روز کامل را به آن اختصاص می دهند. در پروژه های متن باز، گاهی پیش می آید که یک درخواست Pull داریم که نیاز به یک اصلاح کوچک دارد. برای مثال یک فایل پیکربندی به روز شده، یک تنظیم کوچک برای محدودیت های نسخه در composer.js
یا یک اشتباه تایپی در Readme.
در این حالت ما می توانیم درخواست Pull را داده و آن تغییرات را اعمال کنیم که اکثرا به همین شیوه عمل می کنند.
اما آیا راه ساده تری وجود ندارد؟ آیا نمی توانیم کامیت های خود را به درخواست Pull شخص دیگری اضافه کنیم؟ پاسخ مثبت است و یک راه آسان وجود دارد که در این مقاله قصد داریم در مورد آن صحبت کنیم.
می خواهیم این کار را با یک مثال برای شما شرح دهیم. فرض کنید شما در حال کار بر روی آخرین نسخه راهنمای Hitchhiker برای Galaxy در Repository به مسیر fordprefect/the-guide
هستید. یک Contributor منبع باز قدرتمند به نام arthurdent ریپازیتوری شما را Fork کرده و درخواست Pull می کند.
درخواست Pull درست به نظر می رسد، اما فرض کنید arthurdent یک غلط املایی دارد. برای مثال کلمه "towel" را در یک بخش به اشتباه "tolwe" نوشته است. مشارکت کنندگان یا همان Contributor های برنامه های منبع باز عالی هستند، اما اگر او هرگز به این درخواست Pull توجه نکند چطور؟ به جای اینکه از او بخواهید آن را حل کند، شما می خواهید سریعا یک مشکل خودتان را Push کنید.
برای حل این مشکل به ترتیب مراحل زیر را انجام می دهیم.
مرحله اول: Clone
اگر قبلا این کار را نکرده اید، با استفاده از دستور زیر ریپازیتوری خود را به صورت لوکال Clone کنید:
git clone git@github.com:fordprefect/the-guide.git
مرحله دوم: اضافه کردن یک ریموت
برای دیدن Fork کاربر دیگر (و Push کردن کامیت ها)، Fork او را به عنوان یک ریموت به ریپازیتوری لوکال خود اضافه خواهید کرد.
git remote add arthurdent git@github.com:arthurdent/the-guide.git
وقتی که دستور git remote -v
را اجرا کنید، باید Fork را به عنوان یک ریموت جدید به نام arthurdent ببینید:
sites/git/the-guide on master ➜ git remote -v
origin git@github.com:fordprefect/the-guide.git (fetch)
origin git@github.com:fordprefect/the-guide.git (push)
arthurdent git@github.com:arthurdent/the-guide.git (fetch)
arthurdent git@github.com:arthurdent/the-guide.git (push)
مرحله سوم : fetch
ریموت جدید را fetch (واکشی) کنید:
git fetch arthurdent
مرحله چهارم: Check Out
Branch آن ها را به صورت لوکال Check Out کنید.
شما باید Branch مورد نظر را که برای درخواست Pull از آن استفاده کرده اند را check out کنید. اگر مطمئن نیستید که آن ها از کدام Branch استفاده کرده اند، در بالای درخواست Pull نگاه کنید (به عنوان مثال arthurdent:master
). نام آن را غیر از master به صورت لوکال قرار دهید تا هیچ تداخلی (Conflict) با Branch اصلی شما وجود نداشته باشد.
git checkout -b arthurdent-master arthurdent/master
مرحله پنجم: Commit و Push
تغییرات خود را به صورت محلی انجام داده و کامیت کنید، سپس Push را انجام دهید.
git commit -am "Fix how you spelt towel"
git push arthurdent HEAD:master
بسیار خوب! اگر همه چیز خوب پیش برود، مشاهده خواهید کرد که این کامیت در پایین درخواست Pull وجود دارد.
مشکلات احتمالی
! [remote rejected] HEAD -> master (permission denied)
error: failed to push some refs to 'git@github.com:arthurdent/the-guide.git'
اگر هنگام Push یک خطایی دریافت کردید، ممکن است کاربر دیگری تیک چک باکس درخواست Pull با محتوای “Allow edits from maintainers” را برداشته باشد. از آن ها بخواهید این چک باکس را در صفحه درخواست Pull علامت بزنند و دوباره امتحان کنید.
در این مقاله سعی کردیم به صورت ساده، نحوه اضافه کردن کامیت ها به درخواست Pull یک شخص دیگر را به شما نشان دهیم. در صورتی که نکاتی در ذهن شما وجود دارد و ما آن ها را از قلم انداخته ایم و یا با خطاهای دیگر مواجه شده اید، آن ها را با ما در میان بگذارید.