ماجرای یک تنبلی پربرکت

برنامه‌نویس‌ها، بنا بر تعریف، موجوداتی هستند که ترجیح می‌دهند به جای این که وظایفشان را خودشان انجام دهند، کامپیوترهایشان را به کار وا دارند. آن‌ها خوب می‌دانند هر کجا که کاری زیاد و تکراری انجام می‌دهند، بدون شک راه را اشتباه گرفته‌اند.

این را از باب مقدمه عرض کردم تا اخطاری داده باشم که آنچه در پی می‌آید، یک نوشتهٔ مرتبط با برنامه‌نویسی است و از گیت خواهم گفت. مراقب باشید.

احتمالاً بیل گیتس هرگز چنین چیزی نگفته و تصویرش کنار این جمله جنبهٔ زینتی دارد.
احتمالاً بیل گیتس هرگز چنین چیزی نگفته و تصویرش کنار این جمله جنبهٔ زینتی دارد.


ماجرا از آنجا شروع شد که به خودم آمدم و دیدم هر بار که چیزی را، هرچند کوچک، به مخزن پروژه پوش می‌کنم، باید بین سه تا چهار دقیقه، درست روی نقطهٔ ۱۶ درصد، منتظر بمانم و در این زمان هم حوصله‌ام سر می‌رود و هم تمرکز کاری‌ام را از دست می‌دهم.

دستوری به نام gpush که ملاحظه می‌فرمایید، میانبر کوچکی است برای پوش کردن.
دستوری به نام gpush که ملاحظه می‌فرمایید، میانبر کوچکی است برای پوش کردن.


فرهنگ بازنگری کد در سازمان ما، ایجاب می‌کند که روزی چند بار کارهایمان را با یکدیگر ترکیب کنیم و برای هر کار کوچکی برنچ کوچکی بسازیم و این موضوع، زمان‌های انتظار را سخت‌تر می‌کرد.

با میثم مشورت کردم و گفت مخزن ما بزرگ شده و تاریخچهٔ سنگینی پیدا کرده و ساخت دلتا، حتی برای یک تغییر کوچک، زمان‌بر است و ما می‌توانیم این تاریخچه را حذف کنیم و دوباره سبک شویم.

گفتم اگر نخواهیم پاک کنیم، چه راه دیگری داریم؟ گفت باید قبل از هر بار پوش کردن، شاخهٔ خودمان را با شاخهٔ dev ترکیب کنیم. این جوری:

git checkout dev
git pull 
git checkout YOURBRANCH 
git merge dev

این همه کار کنیم؟ و تازه بعد هم لازم باشد نام برنچی که در آن هستیم را دوباره تایپ کنیم؟

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

گفت خب بیا و تابعی مثل این را در bashrc خودت تعریف کن.

function gupdate() {    
    git checkout dev    
    git pull    
    git checkout $1    
    git merge dev 
}

تصور می‌کرد که حال آن را دارم که هر بار اسم برنچی که در آن کار می‌کنم را تایپ کنم، اما این طور نبود.

سرتان را درد نیاورم.

یکی من گفتم و یکی او، و دست آخر به این ترکیب رسیدیم:

function gpush() {
    current=`git branch | grep \* | cut -d ' ' -f2`    
    git checkout dev    
    git pull    
    git checkout $current    
    git merge dev -m "merge branch dev into $current"     
    git push origin $current 
}
  • در خط اول نام شاخه‌ای که در آن هستیم را به دست می‌آوریم.
  • در خط دوم به شاخهٔ dev (که default-branch در مخزن ماست) می‌رویم.
  • در خط سوم شاخهٔ dev را به‌روزرسانی می‌کنیم.
  • در خط چهارم به شاخهٔ خودمان برمی‌گردیم و برای این بازگشت از نامی که در خط اول به دست آورده بودیم استفاده می‌کنیم.
  • در خط پنجم شاخهٔ به‌روزشدهٔ dev را در شاخهٔ کاری خودمان ترکیب می‌کنیم و یک commit message مناسب و حرفه‌ای را هم به طور خودکار بر آن می‌گذاریم که اسم شاخهٔ ما را هم به طور دینامیک، از آنچه در خط نخست یافته‌ایم، بخواند و بنویسد.
  • در خط ششم ترکیب حاصل را به گیتهاب می‌فرستیم و باز هم نام شاخهٔ خودمان را تایپ نمی‌کنیم. خودش از آنچه در خط اول به دست آورده استفاده می‌کند.

حالا دیگر برای پوش کردن، کافی است این دستور را در خط فرمان تایپ کنم و با لبخند آپلود سریع آن را ببینم.

gpush

همین (:


پی‌نوشت ۱: خیلی وقت بود که برای نوشتن سراغ ویرگول نیامده بودم. دلم تنگ شده بود.

پی‌نوشت ۲: فایل bashrc خودم را اینجا منتشر کرده‌ام. شاید چیزهایی در آن باشد که به کارتان بیاید، یا ایده‌هایی بدهد.