برنامه نویسی

Learning Git Rebase – انجمن DEV

Summarize this content to 400 words in Persian Lang
این هفته، من روی بازسازی پروژه ام کار کردم، dev-mate-cli. مانند هر Refactor دیگری، هدف اصلی من بهبود پایگاه کد با تمیزتر و ماژولارتر کردن آن بود. با این حال، این روند به همین جا متوقف نشد – من همچنین از این فرصت استفاده کردم و با استفاده از ویژگی rebase تعاملی Git برای مرتب کردن تاریخچه تعهد خود تمرین کردم.

ابزار خط فرمان برای مستندسازی سریع کد شما

یک ابزار خط فرمان که از API تکمیل چت OpenAI برای مستندسازی کد با کمک مدل‌های هوش مصنوعی استفاده می‌کند.
برای مشاهده ویژگی‌ها، این ویدیوی دمو را تماشا کنید.

ویژگی ها

اسناد کد منبع: به طور خودکار نظرات و مستندات را برای کد منبع خود ایجاد کنید.

پردازش چند فایل: یک یا چند فایل را در یک فرمان مدیریت کنید.

انتخاب مدل: انتخاب کنید از کدام مدل هوش مصنوعی استفاده کنید –model پرچم

خروجی سفارشی: خروجی نتایج به یک فایل با –output پرچم گذاری کنید یا آنها را در کنسول نمایش دهید.

خروجی جریان: پاسخ LLM را به خط فرمان پخش کنید –stream پرچم

نصب و راه اندازی

کلون کردن مخزن:

git clone https://github.com/mayank-Pareek/dev-mate-cli.git
cd dev-mate-cli

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نصب وابستگی ها:

npm install

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تنظیم متغیرهای محیطی:
ایجاد یک .env فایل را در دایرکتوری ریشه پروژه با ایجاد یک کپی از .env.example فایل:

cp .env.example .env

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جایگزین کنید API_KEY و BASE_URL مقادیر با یک کلید API و URL تولید شده از یک Open AI…

بازسازی اهداف

قبل از ورود به Git، می‌خواستم روی بهبود چندین جنبه از کدم تمرکز کنم:

ماژولاریت: تقسیم عملکردهای بزرگ به اجزای کوچکتر و قابل استفاده مجدد.
Error Handling: بهبود نحوه مدیریت برنامه مسیرهای ورودی مختلف.
پاسخ هوش مصنوعی: اصلاح نحوه تعامل برنامه با API OpenAI، تضمین تفکیک بهتر نگرانی ها.
عملکرد: کارآمدتر کردن کد مدیریت فایل با معرفی بازگشت به دایرکتوری های پردازش.

گام به گام Refactor

در اینجا خلاصه ای از مراحلی است که من برای بازسازی انجام دادم dev-mate-cli:

پردازش فایل را به fileHandler منتقل کنیداولین کار من پاک کردن کد مسئول پردازش فایل بود. قبلاً این منطق با بخشی از کد ترکیب شده بود که تنظیمات برنامه cli را انجام می داد. program.ts. برای بهبود ماژولار بودن، پردازش فایل را به یک ماژول اختصاصی fileHandler منتقل کردم. این نگرانی‌ها را از هم جدا کرد و نگهداری و آزمایش کد را آسان‌تر کرد.
پردازش مسیر فایل را بازگشتی کنیداز آنجایی که من قبلاً روی پردازش فایل کار می کردم، فرصتی را دیدم که استحکام بیشتری را اضافه کنم. این تابع در ابتدا مسیرهای فایل را مدیریت می کرد اما به طور عمیق دایرکتوری ها را طی نمی کرد. من آن را با افزودن منطق بازگشتی برای مدیریت دایرکتوری‌ها بهبود دادم و اطمینان حاصل کردم که برنامه هر فایلی را در زیر شاخه‌ها نیز پردازش می‌کند.
منطق پاسخ هوش مصنوعی را به توابع جداگانه تقسیم کنیدیکی از عملکردها خیلی زیاد انجام می‌داد – رسیدگی به درخواست و پاسخ هوش مصنوعی در یک حرکت. برای ساده‌تر کردن این موضوع، آن را به دو عملکرد تقسیم کردم: یکی برای ایجاد پاسخ و دیگری برای رسیدگی به آنچه پس از آن اتفاق می‌افتد. این تفکیک نگرانی‌ها نه تنها کد را پاک‌تر کرد، بلکه گسترش آن را در آینده آسان‌تر کرد.
خروجی استفاده از رمز را هنگام پخش جریانی پاسخ برطرف کنیددر حین پخش پاسخ‌های هوش مصنوعی به خط فرمان، متوجه شدم که گزارش استفاده از توکن آن‌طور که انتظار می‌رفت کار نمی‌کند. این به دلیل مدیریت نادرست تکه های پاسخ در هنگام پخش است. من منطق را اصلاح کردم تا استفاده از نشانه اکنون به درستی نمایش داده شود، حتی زمانی که داده ها به خط فرمان منتقل می شوند.
افزودن رابط و بازگشت به گزینه های برنامهبرای اطمینان از اینکه برنامه گزینه های از دست رفته را به خوبی مدیریت می کند، مقادیر بازگشتی را برای مدل و دما اضافه کردم. من همچنین یک رابط برای تعریف نوع گزینه ایجاد کردم، ایمنی نوع را بهبود بخشید و کد را قابل پیش بینی تر کرد.

Git Rebase: Interactive Squashing

وقتی همه تغییرات ایجاد شد، توجهم را به تاریخچه commit معطوف کردم. من 5 تعهد جداگانه انجام داده بودم که هر کدام نشان دهنده یک تغییر منطقی بود. برای تمیز نگه داشتن تاریخچه Git، تصمیم گرفتم این commit ها را با استفاده از ویژگی rebase تعاملی Git به یکی تبدیل کنم.

دوید git rebase main -i برای شروع یک rebase تعاملی با شاخه اصلی.
5 commit را به یکی تبدیل کرد.
پیام commit را اصلاح کرد تا همه تغییرات را به شیوه ای واضح و مختصر با استفاده از آن خلاصه کند git commit –amend فرمان
با استفاده از ادغام سریع به جلو، شاخه موضوع را در شاخه اصلی ادغام کرد.
با استفاده از commit جدید به مبدا فشار داده شد git push origin main.

rebase تعاملی نرم بود، و من آن را ابزاری ارزشمند برای حفظ تاریخچه پروژه تمیز یافتم. من همچنین یاد گرفتم که چقدر مهم است که اغلب متعهد شوید اما تاریخچه را برای نگهبانان و همکاران قابل خواندن نگه دارید.

کامیت نهایی را می توانید در اینجا بررسی کنید – https://github.com/mayank-Pareek/dev-mate-cli/commit/16fe682e17cd0983d793298adfee504b16d71537

این هفته، من روی بازسازی پروژه ام کار کردم، dev-mate-cli. مانند هر Refactor دیگری، هدف اصلی من بهبود پایگاه کد با تمیزتر و ماژولارتر کردن آن بود. با این حال، این روند به همین جا متوقف نشد – من همچنین از این فرصت استفاده کردم و با استفاده از ویژگی rebase تعاملی Git برای مرتب کردن تاریخچه تعهد خود تمرین کردم.

یک ابزار خط فرمان که از API تکمیل چت OpenAI برای مستندسازی کد با کمک مدل‌های هوش مصنوعی استفاده می‌کند.

برای مشاهده ویژگی‌ها، این ویدیوی دمو را تماشا کنید.

ویژگی ها

  • اسناد کد منبع: به طور خودکار نظرات و مستندات را برای کد منبع خود ایجاد کنید.
  • پردازش چند فایل: یک یا چند فایل را در یک فرمان مدیریت کنید.
  • انتخاب مدل: انتخاب کنید از کدام مدل هوش مصنوعی استفاده کنید --model پرچم
  • خروجی سفارشی: خروجی نتایج به یک فایل با --output پرچم گذاری کنید یا آنها را در کنسول نمایش دهید.
  • خروجی جریان: پاسخ LLM را به خط فرمان پخش کنید --stream پرچم

نصب و راه اندازی

  1. کلون کردن مخزن:

    git clone https://github.com/mayank-Pareek/dev-mate-cli.git
    cd dev-mate-cli
    وارد حالت تمام صفحه شوید

    از حالت تمام صفحه خارج شوید

  2. نصب وابستگی ها:

    npm install
    وارد حالت تمام صفحه شوید

    از حالت تمام صفحه خارج شوید

  3. تنظیم متغیرهای محیطی:

    ایجاد یک .env فایل را در دایرکتوری ریشه پروژه با ایجاد یک کپی از .env.example فایل:

    cp .env.example .env
    وارد حالت تمام صفحه شوید

    از حالت تمام صفحه خارج شوید

    جایگزین کنید API_KEY و BASE_URL مقادیر با یک کلید API و URL تولید شده از یک Open AI…

بازسازی اهداف

قبل از ورود به Git، می‌خواستم روی بهبود چندین جنبه از کدم تمرکز کنم:

  • ماژولاریت: تقسیم عملکردهای بزرگ به اجزای کوچکتر و قابل استفاده مجدد.
  • Error Handling: بهبود نحوه مدیریت برنامه مسیرهای ورودی مختلف.
  • پاسخ هوش مصنوعی: اصلاح نحوه تعامل برنامه با API OpenAI، تضمین تفکیک بهتر نگرانی ها.
  • عملکرد: کارآمدتر کردن کد مدیریت فایل با معرفی بازگشت به دایرکتوری های پردازش.

گام به گام Refactor

در اینجا خلاصه ای از مراحلی است که من برای بازسازی انجام دادم dev-mate-cli:

  1. پردازش فایل را به fileHandler منتقل کنید
    اولین کار من پاک کردن کد مسئول پردازش فایل بود. قبلاً این منطق با بخشی از کد ترکیب شده بود که تنظیمات برنامه cli را انجام می داد. program.ts. برای بهبود ماژولار بودن، پردازش فایل را به یک ماژول اختصاصی fileHandler منتقل کردم. این نگرانی‌ها را از هم جدا کرد و نگهداری و آزمایش کد را آسان‌تر کرد.

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

  3. منطق پاسخ هوش مصنوعی را به توابع جداگانه تقسیم کنید
    یکی از عملکردها خیلی زیاد انجام می‌داد – رسیدگی به درخواست و پاسخ هوش مصنوعی در یک حرکت. برای ساده‌تر کردن این موضوع، آن را به دو عملکرد تقسیم کردم: یکی برای ایجاد پاسخ و دیگری برای رسیدگی به آنچه پس از آن اتفاق می‌افتد. این تفکیک نگرانی‌ها نه تنها کد را پاک‌تر کرد، بلکه گسترش آن را در آینده آسان‌تر کرد.

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

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

Git Rebase: Interactive Squashing

وقتی همه تغییرات ایجاد شد، توجهم را به تاریخچه commit معطوف کردم. من 5 تعهد جداگانه انجام داده بودم که هر کدام نشان دهنده یک تغییر منطقی بود. برای تمیز نگه داشتن تاریخچه Git، تصمیم گرفتم این commit ها را با استفاده از ویژگی rebase تعاملی Git به یکی تبدیل کنم.

  1. دوید git rebase main -i برای شروع یک rebase تعاملی با شاخه اصلی.
  2. 5 commit را به یکی تبدیل کرد.
  3. پیام commit را اصلاح کرد تا همه تغییرات را به شیوه ای واضح و مختصر با استفاده از آن خلاصه کند git commit --amend فرمان
  4. با استفاده از ادغام سریع به جلو، شاخه موضوع را در شاخه اصلی ادغام کرد.
  5. با استفاده از commit جدید به مبدا فشار داده شد git push origin main.

rebase تعاملی نرم بود، و من آن را ابزاری ارزشمند برای حفظ تاریخچه پروژه تمیز یافتم. من همچنین یاد گرفتم که چقدر مهم است که اغلب متعهد شوید اما تاریخچه را برای نگهبانان و همکاران قابل خواندن نگه دارید.

کامیت نهایی را می توانید در اینجا بررسی کنید – https://github.com/mayank-Pareek/dev-mate-cli/commit/16fe682e17cd0983d793298adfee504b16d71537

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا