Git بدون شک یک ابزار بسیار مهم برای توسعه دهندگان است، زیرا به ما کمک می کند تا به طور یکپارچه با هم همکاری کنیم، تغییرات را به طور موثر پیگیری کنیم و یکپارچگی پروژه را در محیط های توزیع شده حفظ کنیم.

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

در این مقاله، ما به دنیای زیرماژول‌های Git می‌پردازیم تا درک بهتری از روش عملکرد آن‌ها داشته باشیم.

پیش نیازها

  • درک اولیه از Git و GitHub.
  • Git نصب شده است.

ساب ماژول های Git چیست؟

یک زیر ماژول Git به یک مخزن Git اشاره دارد که در یک مخزن Git دیگر وجود دارد.

شما می توانید آن را به عنوان یک مخزن فرزند یا زیر مجموعه ای از یک مخزن اصلی در نظر بگیرید.

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

تفاوت بین Repository و Submodule

یک زیر ماژول نیز یک مخزن است. تنها تفاوت بین یک زیر ماژول و یک مخزن در این واقعیت است که یک زیر ماژول فقط می تواند به عنوان یک مخزن Git در یک مخزن دیگر وجود داشته باشد. اگر یک زیر ماژول در خارج از یک مخزن وجود داشته باشد، دیگر نمی توان آن را زیر ماژول نامید. فقط می توان به آن به عنوان یک مخزن اشاره کرد.

همه زیر ماژول ها مخزن هستند اما همه مخازن زیر ماژول نیستند.

چگونه یک زیر ماژول Git اضافه کنیم

برای اضافه کردن یک زیرماژول Git، ابتدا مطمئن شوید که در یک مخزن Git هستید و URL مخزن راه دوری را که می‌خواهید به عنوان یک زیر ماژول اضافه کنید، دارید.

سپس، استفاده کنید git submodule add دستور، و سپس URL مخزنی که می خواهید اضافه کنید.

git submodule add <submodule_url>

دستور بالا زیر ماژول را در قسمت اضافه می کند root سطح مخزن اصلی شما به طور پیش فرض.

پیشنهاد می‌کنیم بخوانید:  چگونه پروژه خود را میزبانی کنیم روی GitHub - با مثال توضیح داده شده است

برای تعیین دایرکتوری که می خواهید زیر ماژول در مخزن اصلی شما قرار گیرد، آرگومان path را به دستور اضافه کنید.

git submodule add <submodule_url> <path>

جایی که:

  • <submodule_url> URL مخزن Git است که می خواهید به عنوان یک زیر ماژول اضافه کنید.
  • <path> مسیری است که می خواهید زیر ماژول در مخزن شما اضافه شود.

فایل gitmodules

پس از ایجاد یک زیر ماژول جدید git با git submodule add دستور، یک فایل جدید به آن اضافه خواهد شد root سطح مخزن اصلی شما آن فایل است gitmodules فایل.

gitmodules یک فایل پیکربندی است که توسط Git برای ذخیره اطلاعات مربوط به زیر ماژول های موجود در یک مخزن استفاده می شود. این شامل جزئیات مربوط به هر زیر ماژول، مانند URL ها و مسیرهای آنها است.

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

در اینجا یک مثال از آنچه که gitmodules فایل به نظر می رسد:

[submodule "example"]
    path = example
    url = https://github.com/example/example.git

اگر بیش از یک زیر ماژول در پروژه خود دارید، این همان چیزی است که شما دارید gitmodules فایل به شکل زیر خواهد بود:

[submodule "submodule1"]
    path = submodule1
    url = https://github.com/example/submodule1.git

[submodule "submodule2"]
    path = submodule2
    url = https://github.com/example/submodule2.git

[submodule "submodule3"]
    path = submodule3
    url = https://github.com/example/submodule3.git

چگونه یک زیر ماژول اضافه نکنیم

گاهی اوقات ممکن است وسوسه شوید که از آن استفاده کنید git clone دستور اضافه کردن یک مخزن به عنوان یک وابستگی در مخزن شما. شما باید در برابر آن وسوسه مقاومت کنید!

اگر از git clone دستور، پیام زیر را دریافت خواهید کرد روی Git Bash شما terminal: “شما یک مخزن git دیگر در مخزن فعلی خود اضافه کرده اید. کلون های مخزن خارجی حاوی محتویات مخزن تعبیه شده نیستند و نمی دانند چگونه آن را به دست آورند…”

git_hint
دستور git clone هنگام تلاش برای اضافه کردن یک زیر ماژول

این پیام را در حالی دریافت کردم که سعی می کردم یک زیر ماژول به آن اضافه کنم theme/anake دایرکتوری با استفاده از git clone فرمان

به طور عمده دو دلیل وجود دارد که چرا نباید از این دستور استفاده کنید:

  1. هنگامی که کد خود را به مخزن راه دور خود فشار دهید، دایرکتوری زیرماژول خالی خواهد بود.
  2. کلون های مخزن خارجی (مخزن اصلی) حاوی محتویات مخزن تعبیه شده (زیر ماژول) نیستند و نمی دانند که چگونه آن را بدست آورند، همانطور که توسط Git در پیام بالا بیان شده است.
پیشنهاد می‌کنیم بخوانید:  Undo Git Add – نحوه حذف فایل های اضافه شده در Git

و دلایل فوق مسائلی هستند که از نداشتن آن ناشی می شوند gitmodules فایل (که هنگام استفاده از فایل به طور خودکار اضافه می شود git submodule add فرمان) در root سطح مخزن اصلی شما

اضافه کردن دستی gitmodules فایل در root سطح مخزن اصلی شما مشکلات فوق را برطرف می کند. با این حال، ایجاد یک زیر ماژول با استفاده از git submodule add فرمان از آنها جلوگیری می کند.

چگونه یک مخزن را با یک زیر ماژول Git کلون کنیم

دو دستور وجود دارد که باید هر زمان که می خواهید مخازن با زیر ماژول ها را کلون کنید آنها را به خاطر بسپارید. آن دستورات عبارتند از:

git submodule init: این دستور زیر ماژول های تعریف شده در مخزن را مقداردهی اولیه می کند. وقتی یک مخزن حاوی زیر ماژول ها را کلون می کنید، Git به طور خودکار محتویات زیر ماژول را واکشی نمی کند. شما باید بدوید git submodule init ابتدا آنها را مقداردهی اولیه کنید.

Git را می خواند gitmodules فایل در مخزن برای پیکربندی زیر ماژول ها و آماده شدن برای واکشی محتویات زیر ماژول در هنگام اجرا git submodule update.

git submodule update: این دستور آخرین commit ها را از مخازن زیر ماژول واکشی می کند.

اگر commit های جدیدی در مخازن زیر ماژول وجود دارد، ممکن است لازم باشد اجرا کنید git submodule update برای به روز رسانی زیر ماژول ها به آخرین وضعیت.

برای شبیه سازی مخازن دارای زیر ماژول ها، اولین کاری که باید انجام دهید اجرای آن است git clone دستور برای آن مخزن.

git clone <repository_URL>

پس از آن، را اجرا کنید git submodule init فرمان در root سطح مخزن اصلی

git submodule init

سپس، در نهایت، را اجرا کنید git submodule update فرمان

git submodule update

نتیجه

زیرماژول های Git به عنوان مکانیزمی برای مدیریت موثر وابستگی ها در یک پروژه عمل می کنند. آنها امکان ادغام یکپارچه مخازن خارجی را در یک پروژه اصلی، حفظ مرزهای واضح بین اجزا و در عین حال تسهیل همکاری فراهم می کنند.

با استفاده از زیر ماژول‌ها، توسعه‌دهندگان می‌توانند جریان کار را ساده‌سازی کنند، یکپارچگی پروژه را حفظ کنند و همکاری کارآمد را تسهیل کنند، و در نهایت به فرآیندهای توسعه قوی‌تر و مقیاس‌پذیر کمک کنند.