مرج‌ریکوئست یا پول‌ریکوئست؟

به‌تاریخ:۱ بهمن ۱۴۰۱
 / 
خواندن در 3 دقیقه

تا حالا برای شما سوال شده تفاوت «مرج‌ریکوئست» با «پول‌ریکوئست» چیست؟ اگر شده باشد و جستجو کرده باشید، احتمالا میدانید که دقیقا یک مفهوم هستند و فقط بستگی به پلتفرمی دارد که استفاده می‌کنید. گیتهاب دوست دارد بگوید پول‌ریکوئست، ولی گیتلب میگوید مرج‌ریکوئست. اما من میخواهم بگویم آنها غلط کرده‌اند و حرف مفت میزنند. این دو مفهوم کاملا متفاوت هستند!

two developers anime style cartoon

با مرج‌ریکوئست شروع کنیم. برای یک محصول استارتاپی، یک تیم فنی تشکیل شده که با متدولوژی اسکرام پیش می‌رود. بعد از پلنینگ و بحث‌های اولیه، دولوپرِ تیم فیچری را پیاده‌سازی می‌کند و مرج‌ریکوئست به سیستم‌اونر میزند. سیستم‌اونر احتمالا شخصیت باتجربه‌تری در آن شرکت است، یا حتی شاید چپترلید هم باشد و دغدغه‌ی جدی روی کیفیت کدها دارد. با توجه به اینکه سیستم‌اونر است، احتمالا از تیم‌های مختلفی مرج‌ریکوئست می‌گیرد، بنابراین مستنداتی تهیه کرده است که پروسه‌ی مرج‌ریکوئست زدن چگونه باشد. از قوانین و استایل‌گایدها گرفته تا چگونگی اسم‌گذاری برنچ‌های جدید را نیز مشخص کرده است. اگر واقعا شخصیت باتجربه‌ای باشد، حتی لینترهای زیادی کانفیگ کرده که هر دولوپر جونیوری به کیفیتِ کدهای مقدس او گند و کصافط نزند.

وقتی مرج‌ریکوئست می‌آید، کامنت‌های زیادی باز می‌کند. اما تیم اسکرام تقریبا به‌آخرهای ایتریشن خود نزدیک شده و برای ریلیز کردن عجله دارد. سیستم‌اونر ولی این حرف‌ها را نمی‌فهمد. از نظر او «کدی که تمیز نباشد، یک کدِ تمیز نیست»! و این تمام دغدغه‌ی سیستم‌اونر است. بحث و جدل شکل می‌گیرد، دولوپر از تیم خود یارکشی میکند و پروداکت‌منجر را واسطه میکند که کدها فعلا مرج شود و بعدا آنها را ریفاکتور خواهد کرد. اما سیستم‌اونر که تجربه‌ی این ماجراها را دارد و گوش او پر است از اینگونه وعده وعیدهای پوچ و توخالی، می‌داند یک تیم اسکرام یا پروداکت‌منجر هیچوقت اولویت چندانی برای ریفاکتور و تمیز کردن کدها قائل نخواهند شد و «کدی که کثیف شد، یک کد کثیف باقی خواهد ماند».

خلاصه دعوا بالا می‌گیرد و کار به مدیر عامل و هیئت مدیره و سهامداران و انتقادات کاربران در توییتر و غیره می‌رسد و نمایندگان مجلس نیز جبهه‌های مختلفی می‌گیرند و بیانیه می‌دهند. در میانه‌ی این دعواهای سیاسی، شما که هیچ‌کاره‌ی این شرکت هستید، متوجه میشوید که کدها اوپن‌سورس است و از قضا به‌کارتان می‌آید. اما زمانی که می‌خواهید برای پروژه‌ی شخصی خود از کدهای آنها استفاده کنید، متوجه می‌شوید که فیچر یا کانفیگ خاصی را پیاده‌سازی نکرده‌اند یا از آن پشتیبانی نمی‌کنند. بنابراین از ریپازیتوری آنها یک clone می‌گیرید و بر روی سیستم خود تغییر می‌دهید و استفاده می‌کنید و از خوشحالی نیز در پوست خود نمی‌گنجید.

کمی بعد دعوای تیم حل می‌شود و فیچر جدید آن تیم بالاخره مرج و ریلیز می‌شود. ولی کدی که شما clone کرده‌اید نسخه‌ی قبلی است که این فیچرهای جدید را ندارد. از آنجا که شما شخصی مفت‌طلب هستید، هم تغییرات دلخواه خود را می‌خواهید و هم نگهداری و تغییرات آینده‌ی تیم اصلی را! بنابراین از تغییرات خود یک پول‌ریکوئست می‌دهید؛ یعنی از سیستم‌اونر می‌خواهید که تغییرات ریپازیتوری شما را دریافت (pull) کند، گند و کصافط آن را به‌عهده بگیرد و در نهایت مرج کند. البته شما شخصی در داخل تیم‌های آن شرکت نیستید، پروداکت‌منجر و قدرت سیاسی آن‌ها را ندارید، و بنابراین چاره‌ای جز اینکه رفتاری مودبانه و ملتمسانه نشان دهید، ندارید.

merge request vs pull request

و این بود تفاوت مرج‌ریکوئست با پول‌ریکوئست! گیتلب بیشتر کاربرد داخل سازمانی و تیمی دارد که از اصطلاح اول یعنی مرج‌ریکوئست استفاده می‌کند، اما گیتهاب بیشتر مخاطبانی با پروژه‌های اوپن‌سورس دارد که الزاما تیم‌های متمرکز نیستند و از اصطلاح پول‌ریکوئست استفاده می‌کند.