subtree یک جایگزین مناسب برای submodule ها در git

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

دستور subtree یک مخزن git را به عنوان یک زیرشاخه به مخزن اصلی اضافه می‌کند، همچنین کار بعدی آن این است که می‌توان زیرشاخه‌ای را از مخزن بزرگ جدا کرده تا تبدیل به یک مخزن مجزا شود. معمولا در مواردی که چند مخزن (یکی اصلی و مابقی به عنوان ماژول) وجود دارد از این روش استفاده می‌کنند. بدین صورت که یک مخزن اصلی(بزرگ) دارند که همه مخازن ماژول‌ها به عنوان subtree اضافه شده‌اند. روند کار یک برنامه‌نویس با مخزن اصلی بصورت عادی است و با همان روندهای آشنای git، توسعه را شروع و ادامه می‌دهد. حال در زمان‌هایی می‌توان تغییرات زیرشاخه‌ها را به مخازن مجزایشان توسط افرادی که تجربه‌‌ی بیشتری دارند و یا حتی با استفاده از چند script ساده ارسال نمود.

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

اضافه‌کردن یک subtree

اضافه‌کردن یک subtree کار راحتی است. کافی است که به خط فرمان رفته و از دستور git subtree add استفاده کنید مثال این دستور به شکل زیر است:

بعد از اجرای درست این دستور شاخه‌ای به نام blog به مخزن اصلی اضافه شده و تمامی سابقه مخزن ماژول نیز به عنوان سابقه مخزن اصلی اضافه می‌شود. در این مرحله نیاز نیست کار دیگری انجام دهید. تمامی ماژول‌ها به همین منوال اضافه می‌شود.

کار با مخزنی که subtree دارد

کار با مخازنی که subtree دارد عینا شبیه مخازن عادی است و هیچ تفاوتی با مخازن عادی ندارد

بازگرداندن تغییرات به ماژول‌ها

برای بازگرداندن تغییرات به ماژول‌ها می‌توانید از دستور زیر استفاده کنید

نکات قابل توجه هنگام استفاده از subtreeها

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

  • کل سابقه مخزن ماژول به مخزن مادر اضافه می‌شود. که در صورت وجود سابقه‌های زیاد این عمل باعث سنگین‌شدن مخزن اصلی می‌شود.
  • روند merge کردن و رفع conflict ها پیچیده‌تر از حالت عادی است.

در مجموع استفاده از subtree به استفاده از submodule بخاطر سادگی بیشتر ارجحیت دارد.

منابع و خواندن بیشتر

منابع این متن در زیر آمده است:

عباس یزدان پناه

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

همچنین ممکن است دوست داشته باشید ...

پاسخ دهید

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