| GIT-SUBMODULE(1) | Git Manual | GIT-SUBMODULE(1) |
نام (NAME)
git-submodule - مقداردهی اولیه، بهروزرسانی یا بررسی زیرماژولها
خلاصه دستور (SYNOPSIS)
git submodule [--quiet] [--cached] git submodule [--quiet] add [<options>] [--] <repository> [<path>] git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...] git submodule [--quiet] init [--] [<path>...] git submodule [--quiet] deinit [-f|--force] (--all|[--] <path>...) git submodule [--quiet] update [<options>] [--] [<path>...] git submodule [--quiet] set-branch [<options>] [--] <path> git submodule [--quiet] set-url [--] <path> <newurl> git submodule [--quiet] summary [<options>] [--] [<path>...] git submodule [--quiet] foreach [--recursive] <command> git submodule [--quiet] sync [--recursive] [--] [<path>...] git submodule [--quiet] absorbgitdirs [--] [<path>...]
توضیحات (DESCRIPTION)
زیرماژولها را بررسی، بهروزرسانی و مدیریت میکند.
برای اطلاعات بیشتر درباره زیرماژولها، به gitsubmodules(7) مراجعه کنید.
دستورات (COMMANDS)
بدون هیچ آرگومانی، وضعیت زیرماژولهای موجود را نمایش میدهد. چندین زیردستور برای انجام عملیات روی زیرماژولها در دسترس است.
add [-b <branch>] [-f | --force] [--name <name>] [--reference <repository>] [--ref-format <format>] [--depth <depth>] [--] <repository> [<path>]
<repository> نشانی URL مربوط به مخزن origin زیرماژول جدید است. این نشانی میتواند یک URL مطلق باشد، یا (اگر با ./ یا ../ شروع شود) مکانی نسبی نسبت به مخزن ریموت پیشفرض پروژه والد باشد (لطفاً توجه داشته باشید برای مشخص کردن مخزن foo.git که دقیقاً در کنار پروژه والد bar.git قرار دارد، باید از ../foo.git بهجای ./foo.git استفاده کنید - همانطور که ممکن است هنگام پیروی از قواعد URLهای نسبی انتظار برود - زیرا ارزیابی URLهای نسبی در Git مشابه دایرکتوریهای نسبی است).
ریموت پیشفرض، همان ریموتِ شاخه ردیابی ریموت برای شاخه فعلی است. اگر چنین شاخه ردیابی ریموتی وجود نداشته باشد یا HEAD جدا شده (detached) باشد، origin به عنوان ریموت پیشفرض در نظر گرفته میشود. اگر پروژه والد ریموت پیشفرضی پیکربندی نکرده باشد، پروژه والد مرجع بالادست خود خواهد بود و در عوض از دایرکتوری کاری فعلی استفاده میشود.
آرگومان اختیاری <path> مکان نسبی برای قرارگیری زیرماژول کلونشده در پروژه والد است. اگر <path> داده نشود، بخش کانونیکال مخزن مبدا استفاده میشود (repo برای /path/to/repo.git و foo برای host.xz:foo/.git). اگر <path> وجود داشته باشد و از قبل یک مخزن معتبر Git باشد، بدون کلون کردن برای کامیت آمادهسازی (stage) میشود. همچنین <path> به عنوان نام منطقی زیرماژول در مدخلهای پیکربندی آن استفاده میشود، مگر اینکه از --name <name> برای مشخص کردن نام منطقی استفاده شود.
نشانی URL دادهشده در .gitmodules ثبت میشود تا توسط کاربران بعدی که پروژه والد را کلون میکنند مورد استفاده قرار گیرد. اگر URL به صورت نسبی نسبت به مخزن پروژه والد داده شده باشد، فرض بر این است که مخازن پروژه والد و زیرماژول در همان موقعیت نسبی در کنار هم نگه داشته میشوند و فقط ارائه URL پروژه والد کافی است. دستور git-submodule با استفاده از URL نسبی موجود در .gitmodules زیرماژول را به درستی پیدا خواهد کرد.
اگر --ref-format <format> مشخص شده باشد، فرمت ذخیرهسازی ارجاعات (ref) زیرماژولهای تازهکلونشده بر اساس آن تنظیم میشود.
status [--cached] [--recursive] [--] [<path>...]
اگر --cached مشخص شده باشد، این دستور در عوض SHA-1 ثبتشده در پروژه والد را برای هر زیرماژول چاپ میکند.
اگر --recursive مشخص شده باشد، این دستور به صورت بازگشتی وارد زیرماژولهای تو در تو میشود و وضعیت آنها را نیز نمایش میدهد.
اگر تنها به تغییرات زیرماژولهای مقداردهیشده فعلی نسبت به کامیت ثبتشده در ایندکس یا HEAD علاقهمندید، دستورات git-status(1) و git-diff(1) نیز این اطلاعات را ارائه میدهند (و همچنین میتوانند تغییرات در درخت کاری زیرماژول را گزارش کنند).
init [--] [<path>...]
آرگومانهای اختیاری <path> مشخص میکنند کدام زیرماژولها مقداردهی اولیه شوند. اگر هیچ مسیری مشخص نشده باشد و submodule.active پیکربندی شده باشد، زیرماژولهایی که برای فعال بودن پیکربندی شدهاند مقداردهی اولیه میشوند؛ در غیر این صورت تمام زیرماژولها مقداردهی اولیه خواهند شد.
همچنین مقدار submodule.$name.update را، در صورت وجود در فایل .gitmodules، در .git/config کپی میکند؛ اما (۱) این دستور اطلاعات موجود در .git/config را تغییر نمیدهد، و (۲) مقدار submodule.$name.update که روی یک دستور سفارشی تنظیم شده باشد، به دلایل امنیتی کپی نمیشود.
سپس میتوانید نشانیهای URL کلون زیرماژول را در .git/config برای پیکربندی محلی خود سفارشی کرده و با git submodule update ادامه دهید؛ همچنین اگر قصد سفارشیسازی مکان هیچیک از زیرماژولها را ندارید، میتوانید صرفاً از git submodule update --init بدون گام صریح init استفاده کنید.
برای تعریف ریموت پیشفرض، به زیردستور add مراجعه کنید.
deinit [-f | --force] (--all|[--] <path>...)
هنگامی که این دستور بدون مشخص کردن مسیر (pathspec) اجرا شود، برای جلوگیری از اشتباه، به جای لغو ثبت همه چیز، با خطا خارج میشود.
اگر --force مشخص شده باشد، درخت کاری زیرماژول حتی در صورت داشتن تغییرات محلی حذف خواهد شد.
اگر واقعاً میخواهید یک زیرماژول را از مخزن حذف کرده و آن را کامیت کنید، به جای آن از git-rm(1) استفاده کنید. برای گزینههای حذف به gitsubmodules(7) مراجعه کنید.
update [--init] [--remote] [-N | --no-fetch] [--[no-]recommend-shallow] [-f | --force] [--checkout | --rebase | --merge] [--reference=<repository>] [--ref-format=<format>] [--depth=<depth>] [--recursive] [--jobs <n>] [--[no-]single-branch] [--filter=<filter-spec>] [--] [<path>...]
checkout
اگر --force مشخص شده باشد، زیرماژول چکاوت خواهد شد (با استفاده از git checkout --force)، حتی اگر کامیت مشخصشده در ایندکس مخزن حاوی آن با کامیت چکاوتشده در زیرماژول مطابقت داشته باشد.
rebase
merge
روشهای بهروزرسانی زیر دارای محدودیتهای اضافی هستند:
!<custom-command>
none
اگر زیرماژول هنوز مقداردهی اولیه نشده است، و صرفاً میخواهید از تنظیمات ذخیرهشده در .gitmodules استفاده کنید، میتوانید زیرماژول را به طور خودکار با گزینه --init مقداردهی اولیه کنید.
اگر --recursive مشخص شده باشد، این دستور به صورت بازگشتی وارد زیرماژولهای ثبتشده میشود و هر زیرماژول تو در تویی را در آنها بهروزرسانی میکند.
اگر --ref-format <format> مشخص شده باشد، فرمت ذخیرهسازی ارجاعات زیرماژولهای تازهکلونشده بر اساس آن تنظیم میشود.
اگر --filter <filter-spec> مشخص شده باشد، فیلتر کلون جزئی ارائهشده روی زیرماژول اعمال خواهد شد. برای جزئیات مربوط به مشخصات فیلتر به git-rev-list(1) مراجعه کنید.
set-branch (-b|--branch) <branch> [--] <path>, set-branch (-d|--default) [--] <path>
set-url [--] <path> <newurl>
summary [--cached | --files] [(-n|--summary-limit) <n>] [commit] [--] [<path>...]
استفاده از گزینه --submodule=log همراه با git-diff(1) نیز این اطلاعات را ارائه میدهد.
foreach [--recursive] <command>
$name
$sm_path
$displaypath
$sha1
$toplevel
توجه داشته باشید که برای جلوگیری از تعارض با $PATH در ویندوز، متغیر $path اکنون یک نام مترادف منسوخشده برای متغیر $sm_path است. هر زیرماژولی که در پروژه والد تعریف شده اما چکاوت نشده باشد توسط این دستور نادیده گرفته میشود. دستور foreach مگر در صورت دادن --quiet، نام هر زیرماژول را قبل از اجرای دستور چاپ میکند. اگر --recursive داده شده باشد، زیرماژولها به صورت بازگشتی پیمایش میشوند (یعنی دستور شل دادهشده در زیرماژولهای تو در تو نیز اجرا میشود). بازگشت کد وضعیت غیرصفر از دستور در هر زیرماژول باعث پایان یافتن پردازش میشود. این رفتار را میتوان با افزودن ||: به انتهای دستور نادیده گرفت.
به عنوان مثال، دستور زیر مسیر و کامیت فعلیِ چکاوتشده را برای هر زیرماژول نشان میدهد:
git submodule foreach 'echo $sm_path `git rev-parse HEAD`'
sync [--recursive] [--] [<path>...]
دستور git submodule sync تمام زیرماژولها را همگامسازی میکند در حالی که git submodule sync -- A تنها زیرماژول A را همگامسازی میکند.
اگر --recursive مشخص شده باشد، این دستور به صورت بازگشتی وارد زیرماژولهای ثبتشده میشود و هر زیرماژول تو در تویی را در آنها همگامسازی میکند.
absorbgitdirs
مخزنی که به طور مستقل کلون شده و بعداً به عنوان زیرماژول اضافه شده است، یا در پیکربندیهای قدیمی، دایرکتوری git زیرماژول را به جای تعبیه در دایرکتوری git پروژه والد، درون خود زیرماژول نگه میدارند.
این دستور به طور پیشفرض بازگشتی است.
گزینهها (OPTIONS)
-q, --quiet
--progress
--all
-b<branch>, --branch=<branch>
-f, --force
add
deinit
update
--cached
--files
-n<n>, --summary-limit=<n>
--remote
این گزینه برای هر یک از روشهای بهروزرسانی پشتیبانیشده (--checkout، --rebase و غیره) کار میکند. تنها تفاوت، منبعِ SHA-1 هدف است. به عنوان مثال، submodule update --remote --merge تغییرات زیرماژول بالادست را در زیرماژولها ادغام میکند، در حالی که submodule update --merge تغییرات gitlink پروژه والد را در زیرماژولها ادغام میکند.
به منظور اطمینان از وضعیت جاری شاخه ردیابی، update --remote قبل از محاسبه SHA-1، مخزن ریموت زیرماژول را واکشی میکند. اگر نمیخواهید واکشی انجام شود، باید از submodule update --remote --no-fetch استفاده کنید.
از این گزینه برای ادغام تغییرات حاصل از زیرپروژه بالادست با HEAD فعلی زیرماژول خود استفاده کنید. متناوباً، میتوانید git pull را از داخل زیرماژول اجرا کنید، که به جز نام شاخه ریموت، معادل آن است: update --remote از مخزن بالادست پیشفرض و submodule.<name>.branch استفاده میکند، در حالی که git pull از branch.<name>.merge زیرماژول استفاده میکند. اگر میخواهید شاخه پیشفرض بالادست را به همراه پروژه والد توزیع کنید از submodule.<name>.branch استفاده کنید، و اگر میخواهید هنگام کار در خود زیرماژول احساس طبیعیتری داشته باشید از branch.<name>.merge استفاده کنید.
-N, --no-fetch
--checkout
--merge
--rebase
--init
--name=<name>
--reference=<repository>
یادداشت (Note)
از این گزینه استفاده نکنید مگر اینکه یادداشت مربوط به گزینههای --reference، --shared و --dissociate در git-clone(1) را با دقت مطالعه کرده باشید.
--dissociate
یادداشت (Note)
یادداشت بالا برای گزینه --reference را ببینید.
--recursive
--depth=<depth>
--recommend-shallow, --no-recommend-shallow
-j<n>, --jobs=<n>
--single-branch, --no-single-branch
<path>...
فایلها (FILES)
هنگام مقداردهی اولیه زیرماژولها، از یک فایل .gitmodules در دایرکتوری سطح بالای مخزن حاوی آن برای یافتن URL هر زیرماژول استفاده میشود. ساختار این فایل باید مشابه با $GIT_DIR/config باشد. کلید مربوط به URL هر زیرماژول عبارت است از submodule.<name>.url. برای جزئیات به gitmodules(5) مراجعه کنید.
همچنین ببینید (SEE ALSO)
گیت (GIT)
بخشی از مجموعه git(1)
| 2026-06-29 | Git 2.55.0 |