بررسی جدیدترین نسخه Fork در گیت هاب

امروز با چالش جالبی روبه رو شدم و پس از جستجو، راه حل مناسبی پیدا کردم…اینجا مینویسم تا شاید یه روزی به کار شما هم بیاد

فرض کنید از کد شخص دیگه ای در ریپازیتوری/مخزن (Repository) گیتهابش استفاده می کنید. بنابه دلایلی اون مخزن رو فورک ( fork ) نکردید و فقط مستقیما از اون استفاده می کنید. یا مخزن مربوطه رو فورک کردین ولی با آخرین تغییرات مخزن مبدا، همسان سازی (sync) نکردین و نسخه ای که شما دارین قدیمی و شامل تغییرات جدید (مثلا چند ماه اخیر) نمیشه… به دلیلی، صاحب مخزن تصمیم میگیره تمام اطلاعات اون مخزن رو به کل پاک کنه و تمام تاریخچه تغییرات ( تمام commit ها وhistory و …) رو هم پاک کنه به طوری که اثری از اون مخزن باقی نمونه …حالا باید چیکار کرد؟

این اتفاق دقیقا دیروز برای من افتاد و وقتی به قسمت فورک اون مخزن مراجعه کردم با عدد تعداد فورک ها که 3.1k بود روبه رو شدم!!!

ما در قسمت نمایش فورک های موجود ( View existing forks) دو حالت نمایش داریم :

1-Tree view

2-List view

در حالت لیست ، شما میتونید با استفاده از امکانات موجود گیتهاب، فیلترهایی برای نمایش نتایج قرار بدین. برای مثال میتونید لیست رو بر اساس آخرین آپدیت sort کنید یا بر اساس بیشترین ستاره ( most starred ) و یا فیلترهایی بر اساس بازه زمانی بدین…

خب مشکل کجاست؟ اگه به هر دلیلی حالت نمایش لیست برای شما غیر فعال باشه ( که برای من بود!) در حالت Tree امکان قراردادن فیلتر وجود نداره

ساده ترین راهکار چیه ؟ ایجاد بوکمارکلت

بوکمارکلت (به انگلیسی: ) ترکیبی از بوکمارک و اپلت است. بوکمارکلت‌ها برنامه‌های جاوااسکریپتی هستند که به صورت بوکمارک در مرورگرها قابل ذخیره‌سازی‌اند و با کلیک‌کردن کاربر روی آن‌ها اجرا می‌شوند. برنامه‌های داخل بوکمارکلت‌ها می‌توانند با اجزای صفحه‌ای که در مرورگر در حال نمایش است ارتباط برقرار کنند.

نحوه ساخت بوکمارکلت برای حل این مشکل:

1- بوکمارک جدیدی بسازید ( برای مثال : در کروم روی آیکون ستاره بوکمارک کلیک کنید - در صفحه کوچک باز شده دکمه More رو انتخاب کنید) ساخت بوکمارکلت 2- در قسمت Name هر نامی که دوست داشتین انتخاب کنید ( برای مثال GitHub Fork Checker ) و در قسمت url کد زیر رو کپی کنید :

javascript:(async () => {
  /* while on the forks page, collect all the hrefs and pop off the first one (original repo) */
  const forks = [...document.querySelectorAll('div.repo a:last-of-type')].map(x => x.href).slice(1);

  for (const fork of forks) {
    /* fetch the forked repo as html, search for the "This branch is [n commits ahead,] [m commits behind]", print it to console */
    await fetch(fork)
      .then(x => x.text())
      .then(html => console.log(`${fork}: ${html.match(/This branch is.*/).pop().replace('This branch is ', '')}`))
      .catch(console.error);
  }
})();

3- گزینه ی Save رو انتخاب کنید

4- وارد لیست فورک های گیتهاب بشید ( در حالت Tree view ) لیست فورک های گیت هاب درحالت Tree View

5- روی بوکمارکی که ساختید کلید کنید تا کد جاوااسکریپت اجرا بشه و مشخصات فورک ها ظاهر بشه نتایج بعد از اجرای بوکمارکلت

همونطور که میبینید نتایج شامل commit ها هستن که با قرمز و سبز نمایش داده شدن. کامیت های سبز نشون دهنده تعداد کامیت های جلوتر از اصلی و قرمز ها، تعداد کامیت های عقب افتاده تر از اصلی هستن…

موفق باشید.