DevTwitter | توییت برنامه نویسی – Telegram
DevTwitter | توییت برنامه نویسی
23.6K subscribers
4.36K photos
358 videos
6 files
4.1K links
توییت های برنامه نویسی و طراحی وب :)

@dvtwi

Hashtags:
devtwitter.t.me/5

DevBooks Channel:
https://news.1rj.ru/str/+AYbOl75CLNYxY2U0

Github:
https://github.com/DevTwitter

X:
https://x.com/devtwittir
Download Telegram
خیلی وسوسه انگیزه ولی چرا نباید از فیلدهای جیسون در پایگاه‌های داده رابطه‌ای مانند PostgreSQL و MySQL برای داده‌های تراکنشی استفاده کرد؟

به دلایل زیر:

١) کاهش کارایی جستجو و عملکرد:
جستجو و فیلتر کردن داده‌ها در یک فیلد JSON به طور کلی کندتر از جستجو در جداول ساختاریافته است. برای داده‌های تراکنشی که نیاز به جستجوهای سریع و مکرر دارند، کار با فیلدهای JSON می‌تواند منجر به کاهش کارایی شود. این به دلیل عدم امکان استفاده کامل از ایندکس‌های کارآمد درون فیلدهای JSON است.

۲) فرم ها:
پایگاه داده‌های رابطه‌ای بر اساس طراحی ساختاریافته جداول با کلیدهای اصلی و خارجی استوار هستند تا بتوان روابط بین داده‌ها را بهینه مدیریت کرد. استفاده از فیلدهای JSON می‌تواند به ایجاد داده‌های غیر نرمال (Denormalized) منجر شود، که این امر مدیریت و به‌روزرسانی داده‌ها را پیچیده‌تر می‌کند و می‌تواند منجر به ناسازگاری داده‌ها شود.

۳) مشکل در صحت داده‌ها (Data Integrity):
در جداول ساختاریافته، می‌توان محدودیت‌هایی مانند نوع داده و روابط بین جداول را تعریف کرد که صحت داده‌ها را تضمین کند. در JSON، این نوع کنترل‌ها به طور ذاتی وجود ندارد و داده‌ها به صورت آزاد وارد می‌شوند، که می‌تواند منجر به ورود داده‌های نادرست یا ناسازگار شود.

۴) گزارش گیری:
بسیاری از ابزارهای گزارش‌گیری و تحلیلی به داده‌های ساختاریافته نیاز دارند. داده‌های ذخیره شده به صورت JSON نیاز به تجزیه و تبدیل به قالب‌های ساختاریافته دارند، که این کار اضافه‌ای است و ممکن است بر سرعت و کارایی تحلیل داده‌ها تأثیر منفی بگذارد.

۵) افزایش پیچیدگی مدیریت تراکنش‌ها:
مدیریت تراکنش‌ها و قفل‌گذاری داده‌ها (locking) برای فیلدهای JSON در برخی موارد پیچیده‌تر می‌شود. همچنین اگر بخواهید چندین مقدار درون یک فیلد JSON را همزمان به‌روزرسانی کنید، ممکن است کنترل نسخه‌گذاری و سازگاری داده‌ها دشوارتر شود.

‏۶) مشکل در ایندکس‌گذاری کارآمد:
اگرچه PostgreSQL و MySQL قابلیت ایندکس‌گذاری محدود روی فیلدهای JSON را فراهم می‌کنند، اما این ایندکس‌ها در مقایسه با ایندکس‌های سنتی روی جداول ساختاریافته به اندازه کافی کارآمد نیستند و ممکن است در حجم‌های بزرگ داده باعث کاهش عملکرد شوند.


چکار باید کرد؟

۱- استفاده ترکیبی از فیلدهای رابطه‌ای و فیلد JSON
۲- ایجاد جداول مرتبط برای داده‌های غیرساختاریافته با این شرط که حجم جیسون شما محدوده
۳- ایندکس‌ فیلد JSON (فقط در صورت استفاده)
۴ - طرحی برای تبدیل و مهاجرت تدریجی
۵ - استفاده از NoSQL در کنار پایگاه داده رابطه‌ای


چکار نباید کرد؟

۱- ذخیره کل داده‌های مهم در فیلد JSON
۲- عدم استفاده از ایندکس‌گذاری برای فیلد JSON
۳- استفاده از JSON به جای نرمال‌سازی داده‌ها
۴- نادیده گرفتن نیازهای گزارش‌گیری و تحلیلی
۵- استفاده از JSON برای داده‌هایی که اغلب تغییر می‌کنند
۶- عدم در نظر گرفتن تراکنش‌ها و قفل‌گذاری مناسب
۷- ذخیره‌سازی داده‌های حجیم به صورت JSON
۸- عدم طراحی برای مهاجرت به ساختارهای بهتر
۹- عدم استفاده از ابزارها و توابع مناسب برای کار با JSON

خلاصه:
با توجه به این نکات، برای داده‌های تراکنشی که نیاز به عملکرد سریع، جستجوهای مکرر، و یکپارچگی داده دارند، بهتر است از جداول ساختاریافته با طرح‌های نرمال استفاده شود و JSON را تنها در مواردی به کار برد که نیاز به انعطاف‌پذیری زیاد در ساختار داده‌ها دارید، مانند ذخیره‌سازی داده‌های غیرساختاریافته یا لاگ‌های پیچیده.
درصورت نیاز اجتناب ناپذیر مطمئن باشید که با برنامه این کار رو انجام می‌دهید در غیر اینصورت خبر بدی دارم براتون‏، به زودی مشکل پرفرمنس جدی خواهید داشت و کسب و کارتون با ریسک جدی روبرو خواهد شد. اگر هزینه برای شما مطرح نیست از گزینه هایی مثل Cassandra همینطور Google Bigtable به راحتی رد نشید.

@DevTwitter | <Mohammad Javidan Darugar/>
👍35👎11
450 تا سیستم دیزاین برای ML و LLM

یکی از منابع خوب برای ارتقای کارمون اینه که ببینیم حرفه ای های این حوزه چطوری کار میکنن، کد میزنن و اصلا فکر میکنن.. مهم ترین بخش همین فکر کردنه..

https://www.evidentlyai.com/ml-system-design

@DevTwitter | <Sam92/>
18👍9👎1
دیشب که ما خواب بودیم، OpenAI به صورت خیلی سوسکی، فریمورک‌‌اش رو برای Mutli-Agentic systems رو معرفی کرد.

نکته جالب اینکه به نظرم توی نگاه اول یه چیزی بین LangGraph و ell هست.

گفتن که پروژه در مرحله experimental هست.
https://github.com/openai/swarm

@DevTwitter | <Von Datawarehausen/>
👍13🤣11👎2
حاصل یک هفته مریضی شد این چهارتا پروژه که هرچهارتاش رو پابلیک کردم الان و میتونین ببینین و بخونین و حتی تکملیش کنین و توی رزومه خودتون داشته باشینش
اینجا توضیحات کامل و لینک هاش رو گذاشتم که بتونین راحت تر دسترسی داشته باشین(هفته یک پوشه ۲)

https://github.com/AmiinGholami/MyInternship

@DevTwitter | <Amiin Gholami/>
👍47🤣119👎8
یه چیت شیت کوچیک برای git

@DevTwitter
32👍15🔥1
قراره توی نسخه‌های بعد مرورگر کروم امکان استفاده از سوکت TCP و UDP اضافه بشه

wicg.github.io/direct-sockets/

@DevTwitter | <Ali Shirvani/>
👍39👎4
تجربه کارایی بینظیر با Laravel Octane و Swoole در Docker!

همه ما به عنوان توسعه‌دهنده دنبال راهکارهایی هستیم که برنامه‌هامون سریعتر، بهینه‌تر و مقیاس‌پذیرتر باشن. خبر خوب اینه که Laravel Octane همراه با Swoole دقیقاً همین کار رو انجام میده!
این ترکیب نه تنها سرعت برنامه‌تون رو چند برابر میکنه، بلکه کارایی و قابلیت‌های آن رو هم به طور قابل توجهی افزایش میده.

لاراول اکتان (Laravel Octane) یه پکیج برای بهینه‌سازی عملکرد لاراوله که با استفاده از سرورهای پیشرفته مثل Swoole و RoadRunner، برنامه‌تون رو در حافظه نگه میداره. یعنی هر بار که یه درخواست جدید میاد، لازم نیست کل برنامه از اول بارگذاری بشه. نتیجه؟ سرعت بالاتر و پاسخگویی بهتر به کاربران!


اما Swoole چطور کار میکنه؟
حالا بیایم بیشتر در مورد Swoole صحبت کنیم، چون موضوع اصلی اینجاست.
افزونه Swoole یه Extension برای PHP هست که با زبان C پیاده‌سازی شده و امکانات فوق‌العاده‌ای ارائه میده. بیاین چندتا از قابلیت‌هاش رو مرور کنیم:
1. پردازش همزمان (Concurrency): Swoole امکان اجرای چندین درخواست رو همزمان و بدون افت سرعت فراهم میکنه. این یعنی برنامه‌تون میتونه به تعداد بیشتری از کاربران خدمت بده بدون اینکه دچار لگ یا کندی بشه.
2. استفاده از Coroutine ها : با استفاده از Coroutineها، Swoole میتونه عملیاتهای ورودی/خروجی (I/O) رو به‌صورت غیرهمزمان و بدون مسدودسازی اجرا کنه. این ویژگی باعث میشه برنامه‌تون به شدت سریعتر باشه.
3. وب‌سوکت‌ها و HTTP/2: Swoole از پروتکلهای پیشرفته مثل وبسوکت و HTTP/2 پشتیبانی میکنه، که یعنی میتونید برنامه‌های Real-time با کارایی بالا بسازید.
4. بهینه‌سازی منابع: Swoole مصرف حافظه و CPU رو به شدت کاهش میده و برنامه‌تون رو بهینه‌تر و اقتصادی‌تر میکنه. این یعنی با منابع کمتر، میتونید عملکرد بهتری داشته باشید.


چرا ترکیب Laravel Octane و Swoole عالیه؟
1. سرعت بارگذاری بالا: برنامه‌تون تا ۱۰ برابر سریعتر اجرا میشه.
2. کاهش مصرف منابع: مصرف RAM و CPU به طرز چشمگیری کاهش پیدا میکنه و این یعنی شما میتونید بیشتر با منابع کمتر کار کنید.
3. پشتیبانی از قابلیت‌های پیشرفته: مثل وب‌سوکت‌ها که برای برنامه‌های Real-time فوقالعاده‌ان.
4. پایداری بیشتر: برنامه‌تون در حافظه نگهداری میشه، یعنی نیاز به ریستارت مداوم ندارید.
5. افزایش ظرفیت سرویس‌دهی: میتونید تعداد زیادی از درخواستها رو به‌صورت همزمان مدیریت کنید بدون افت عملکرد.

تجربه شخصی من:
تو چندتا از پروژه‌های اخیرم، از ترکیب Laravel Octane و Swoole همراه با Docker استفاده کردم. کارایی و سرعت به شکل قابل توجهی بهتر شد، زمان پاسخدهی به شدت کاهش پیدا کرد و باعث افزایش Performance برنامه ها شد.

@DevTwitter | <Amir Mohammad Sanjari/>
👍30🤣9👎5🔥5
همیشه دنبال یه فایل منیجر سبک و خوشگل و راحت واسه لاراول بودم و پکیج هایی مثل Unisharp lfm هم سنگین بودن و هم dependency ها و css, js های زیادی داشتن.

اینگونه بود که دست به کار شدم و یه پکیج فایل منیجر مینیمال جمع و جور خوشگل واسه لاراول با Vue3 نوشتم


بسیار سبکه و کاملا بر اساس SOLID هست و کاملا Ajax. فعلا در حد پیمایش، آپلود، تغییر نام، جابجایی آیتم ها، دانلود و ساخت دایرکتوری.
میتونید توی ادیتور ها هم استفادش کنید. مثل CKEditor

https://github.com/keyvanlotfi/laravel-filemanager

@DevTwitter | <Keyvan Lotfi Kamran/>
👍30🔥6🤣6👎4
دوره Large Language Model Agents که در دانشگاه برکلی داره برگزار میشه رو میتونید به صورت رایگان شرکت کنید‌.

تو این دوره شما ابتدا با LLM ها آشنا میشین و بعد یاد میگیرید چطور agent بسازید و در آخر با فرصت‌ها، تهدیدها و محدودیت agentها آشنا خواهید شد.

https://llmagents-learning.org/f24

@DevTwitter | <Reza Jafari/>
👍20👎43🔥3
آیا میدانستید PeachPie
کد PHP را کامپایل میکنه روی .NET runtime اجرا میکنه
چه شود
peachpie.io
https://github.com/peachpiecompiler/peachpie
چرا یکی باید بخواد بین .net و php پل بزنه ؟

@DevTwitter | <MehrdadLinux />
🤣46🔥5👍2
چگونه در Digikala از کرش‌های ناشی از lazy load در وب جلوگیری کردیم و تجربه کاربری را نجات دادیم!

کیفیت افتضاح اینترنت و قطع شدن لحظه‌ای نتورک باعث میشه lazy load کردن اسکریپت‌های یک وبسایت باعث کرش اپلیکیشن و تجربه‌ی بد کاربری بشه. با توجه به شرایط بد اینترنت می‌خواستم این مطلب رو با شما هم به اشتراک به بذارم به امید اینکه با توجه به این نکته‌ی مهم، تجربه‌ی کاربری بهتری در آینده داشته باشیم.

طبق آمار sentry یکی از پروداکت‌هامون، این مسئله روزانه بیش از ۳۰۰۰ کرش ایجاد می‌کرد.
قبل از اینکه دنبال راه حل بگردیم، وبسایت‌های مطرحی که می‌شناختم رو بررسی کردم و متاسفانه همگی این مشکل رو داشتن.
(Aparat, Snapp! Express, Snapp!, Divar, Neshan, Alibaba)


لینک gist زیر راه حل ما برای پروداکتی بر پایه react و vite بود که امکان retry کردن رو به متد React.lazy اضافه می‌کنه و امروز هم با موفقیت تستش روی پروداکشن پاس شد و تقریبا تمامی ارورهای مرتبط با lazy load ماژول‌ها مثل مورد زیر رفع شد.
TypeError: Failed to fetch dynamically imported module

لینک Gist
https://gist.github.com/mberneti/28769391cf27f7580a55dedab342c63a

خوشحال میشم پیشنهادی برای بهبودش دارید روی لینک gist متد retryDynamicImport اضافه کنید.

@DevTwitter | <Mohammadreza Berneti/>
1👍76👎4🔥3
کسانی که تازه دست به کد میشن یا در بعضی از دوستان میدلول, همیشه استرس این رو دارن که آیا کدی که می نویسند، تمیز هست و بر اساس اصولی که باید باشه هست؟!

میخوام یک سری موارد بگم که مفید باشه براتون و استرس کد کثیف نداشته باشید.

شما وقتی یک تکه کدی رو میخواهید بنویسید بر اساس دانش و تجربه تون بنویسید تو فکر این نباشید کدتون کثیف یا نه، سپس کدی که نوشتید رو بررسی کنید با اصول SOLID,KISS,DRY و... هم خونی داره و وارد دنیای ریفکتورینگ Refactoring شوید و در هر مرحله کد هاتون رو تمیز تر از قبل بنویسید.

هدفتون برای بار اول حل مسئله هست سپس اون راه حل تون رو هر دفعه بهبود ببخشید این باعث میشه درک بهتری از کد نویسی نیز داشته باشید.

این تکنیک باعث میشه شما تو آینده به صورت دیفالت کد های تمیز تری بنویسید.

@DevTwitter | <Mohammadreza Abdorrahmani/>
👍101🔥112👎1
کانال یوتیوب من دربارهٔ برنامه‌نویسی اندروید با موضوع تماس‌های تصویری ، ویدیو کانفرنس با WebRTC و همچنین استریم کردن توسط پروتوکول RTP است. تکنیک‌ها، ترفندها و روش‌های ارتقا تجربه کاربری را یادتون می‌دم. برای بهتر شدن تو برنامه‌نویسی اندروید به ما بپیوندید.

http://Youtube.com/@codewithkael

@DevTwitter
👍22🔥6🤣3
شاید بشه اینطوری شروع کرد “هشدار به وردپرس‌کارها”

سال پیش همین‌موقع‌ها بود که یک خبری رسید که وردپرس میخواد react رو جایگزین jquery کنه که محتمل هم بود چون چند سالی هست وردپرس ساختار قالب‌هاشو از بیس تغییر داده و تمام ویجت‌های گوتنبرگ که ویرایشگر جدید وردپرس هستش رو با react توسعه داده

درسته بعدا فهمیدیم خبر واقعی نبوده و ورژن جدید خبری از حذف jquery نبود اما خب نمیشه هم ساده از کنار این موضوع گذشت چرا که وردپرس چندسالی هست داره سعی میکنه خودشو بعنوان framework معرفی کنه

حالا از این موضوع بگذریم امسال خبر رسیده که جدیدا وردپرس با WP Engine به دلیل نقض قوانین وردپرس به چالش خورده
-اگر WP Engine رو نمیشناسید باید بگم شرکتی که پلاگین پرقدرت acf رو توسعه داده‌بود-
وردپرس اعلام کرد که acf دیگه دردسترس نخواهد بود

حالا هدفم از گفتن همه‌ی اینها این‌ بود که بگم در کنار وردپرس سعی کنید استک‌های دیگه مخصوصا react رو هم یاد بگیرین و خیلی خودتون رو محدود به وردپرس نگه ندارین چون واقعا معلوم نیست در آینده وردپرس به چه شکلی ظاهر خواهدشد

@DevTwitter | <Abolfazl Mahjoob/>
👍38🤣14👎11🔥3
چند وقتیه دارم روی چیزی به اسم Bake کار می‌کنم.
به درد همه جور برنامه نویسی می‌خوره.
الان توی مرحله ی feedback جمع کردنم.
خوشحال میشم اگه یه نگاهی بهش بندازید.
https://github.com/ali77gh/bake-rs

@DevTwitter | <Ali/>
👍24🔥41🤣1
امروز می‌خوام ACID رو توضیح بدم که چهار ویژگی مهم در تراکنش‌های پایگاه داده است. بیایید با هم هر کدام از این مفاهیم رو مرور کنیم:

Atomicity (اتمی بودن)
یعنی یا همه عملیات‌های یک تراکنش به‌درستی انجام میشه یا هیچ‌کدام انجام نمیشه. اگر خطایی رخ بده، همه تغییرات برگردونده میشه. مثلاً اگر در هنگام خرید اینترنتی انتقال پول از حساب شما با مشکل مواجه بشه، تراکنش برگردونده میشه و از حساب شما پولی کسر نمیشه.

Consistency (سازگاری)
یعنی پس از هر تراکنش، پایگاه داده همچنان طبق قوانین تعریف‌شده عمل می‌کنه. مثلاً در یک سیستم بانکی، قانون اینه که مجموع موجودی حساب‌ها نباید منفی بشه. حالا تصور کنید اگر کسی بخواد پولی از حساب A به حساب B منتقل کنه و این انتقال ناتمام بمونه (پول از A کم بشه ولی به B اضافه نشه)، قوانین Consistency اجازه نمی‌ده این اتفاق بیفته و تراکنش رو برمی‌گردونه تا موجودی‌ها درست باشه.

Isolation (انزوا)
یعنی تراکنش‌ها از هم جدا هستن و تأثیری روی هم ندارن. به این معنی که اگر دو نفر هم‌زمان در حال انجام تراکنش باشن، یکی روی دیگری تأثیر نمی‌گذاره و نتایج تراکنش‌ها به هم نمی‌ریزه.

Durability (دوام)
یعنی وقتی یک تراکنش به پایان رسید و تأیید شد، تغییرات اون حتی در صورت بروز مشکل یا قطعی سیستم همچنان ذخیره می‌مونه. مثلاً وقتی شما پولی به حساب دیگری واریز می‌کنید، حتی اگر سیستم دچار قطعی بشه، این انتقال در پایگاه داده ثبت شده و از بین نمیره.

@DevTwitter | <Firoozeh Daeizadeh/>
👍53🤣6👎1
This media is not supported in your browser
VIEW IN TELEGRAM
وب سایت levels.fyi‎ که به جویندگان کار کمک میکنه دستمزد در شرکت‌های مختلف را مقایسه کنن یک heatmap حقوق اضافه کرده است! میتونید بازه حقوقی برای شغلهای مختلف را در شهرهای امریکا ببینید.

@DevTwitter | <Mehdi Allahyari/>
11👍6🤣1
بچه ها این دوره ی LLM توسط دانشگاه UC Berkeley و Google DeepMind رو تازه دیدم توی لینکدین...

فوق العاده جالب میاد و ویدیوهاش هم رایگان گذاشتن.. اسلایداش و هم هست و کورس رو میتونید ثبت نام کنید البته یه ماهی هست شروع شده..

llmagents-learning.org/f24

@DevTwitter | <Sam92/>
🔥15🤣5👍3
اصلاح مدل ذهنی از دنیای جاوااسکریپت

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

این دوره در سایت justjavanoscript.com با قیمت ۴۲ دلار در دسترسه و من هم حدودا ۴ سال پیش که Dan Abramov بصورت رایگان این مطالب رو برای فالورهاش ایمیل کرد، مطالعه کردم و بعدش به فارسی در بلاگم منتشر کردم.
لینک رایگان دوره‌ی فارسی دنیای جاوااسکریپت:

لینک

پ.ن:
آقای Dan Abramov (یکی از سازندگان Redux و Create React App و جز مهندسان نرم افزار بخش React شرکت Meta)

@DevTwitter | <Mohammadreza Berneti/>
👍28🔥7
اگه دنبال موقعیت شغلی به صورت ریموت در خارج از ایران هستین این پست برای شماست.

سلام دوستان ، امیدوارم حالتون خوب باشه.
این روزها که مشغول پروسه رزومه فرستادن و مصاحبه هستم یه سری سایت هارو پیدا کردم که فک میکنم میتونه براتون مفید باشه.

از طریق این سایت ها میتونید به تمام موقعیت های شغلی ریموت دسترسی داشته باشید.
https://clojurejobboard.com
https://dailyremote.com

اگه دنبال موقعیت شغلی ریموت در زمینه بلاکچین و کریپتو هستید این سایت ها برای شماست.
https://cryptojobslist.com/
https://www.cryptojobs.com/

امیدوارم براتون مفید باشه

@DevTwitter | <Sina Abedi/>
👍194🤣2👎1
کی از Git Rebase استفاده کنیم و کی از Git Merge؟

گاهی توی کار با Git با این سؤال مواجه می‌شیم که کی بهتره از rebase استفاده کنیم و کی merge؟ این موضوع می‌تونه روی خوانایی و ساختار تاریخچه پروژه تاثیر زیادی بذاره.

وقتی که می‌خوایم تاریخچه‌ای تمیز و خطی داشته باشیم، از git rebase استفاده می‌کنیم. مثلاً فرض کنید در حال کار روی یک شاخهٔ جانبی (feature) هستیم که از شاخهٔ "main" ساخته شده و در این مدت، تغییرات جدیدی در "main" رخ داده است. اگر از rebase استفاده کنیم، تغییرات شاخهٔ "feature" به گونه‌ای دوباره اعمال می‌شوند که انگار بعد از آخرین تغییرات شاخهٔ "main" انجام شده‌اند. این کار کمک می‌کنه که تاریخچه پروژه به شکلی خطی و ساده باقی بمونه و دیدن اینکه چه تغییراتی و به چه ترتیبی انجام شده، راحت‌تر باشه.

اما باید با git rebase با احتیاط رفتار کنیم، چون در صورت استفاده نادرست می‌تونه مشکلات جبران‌ناپذیری ایجاد کنه. به‌ویژه، زمانی که چند نفر به طور همزمان روی یک شاخه کار می‌کنند، استفاده از rebase می‌تونه منجر به سردرگمی و مشکلات ترکیب (merge conflict) بشه. بنابراین، بهتره زمانی از rebase استفاده کنیم که با نحوهٔ عملکرد دقیق اون آشنایی کافی داشته باشیم.

از طرف دیگه، وقتی که می‌خوایم دو شاخه رو با هم ترکیب کنیم و دوست داریم که تاریخچهٔ هر دو شاخه و تغییراتشون حفظ بشه، git merge بهترین انتخابه. این روش مخصوصاً زمانی مناسب هست که بخوایم مشارکت چندین توسعه‌دهنده و تاریخچه کارهای انجام شده روی هر شاخه رو حفظ کنیم. merge به ما این امکان رو می‌ده که به وضوح ببینیم که در چه زمانی دو شاخه با هم ادغام شده‌اند و هیچ تغییری از دست نرفته است.

در کل، هر دو دستور rebase و merge کاربردهای خاص خودشون رو دارن و بسته به نیاز پروژه و ساختار تیم باید انتخاب بشن. rebase برای تمیز نگه داشتن تاریخچه و merge برای ترکیب و حفظ شاخه‌های موازی به کار می‌ره. مهم اینه که هر کدوم رو با دقت و با توجه به نیازهای پروژه استفاده کنیم.

@DevTwitter | <Amirhisein Ahmadi/>
👍32👎6