Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.54.0
2026-04-20
- 2.53.0 no changes
-
2.52.0
2025-11-17
- 2.51.1 → 2.51.2 no changes
-
2.51.0
2025-08-18
- 2.47.1 → 2.50.1 no changes
-
2.47.0
2024-10-06
- 2.44.1 → 2.46.4 no changes
-
2.44.0
2024-02-23
- 2.42.1 → 2.43.7 no changes
-
2.42.0
2023-08-21
- 2.36.1 → 2.41.3 no changes
-
2.36.0
2022-04-18
- 2.28.1 → 2.35.8 no changes
-
2.28.0
2020-07-27
- 2.26.1 → 2.27.1 no changes
-
2.26.0
2020-03-22
- 2.25.2 → 2.25.5 no changes
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 no changes
-
2.24.0
2019-11-04
- 2.22.1 → 2.23.4 no changes
-
2.22.0
2019-06-07
- 2.19.1 → 2.21.4 no changes
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.17.0 → 2.17.6 no changes
-
2.16.6
2019-12-06
- 2.15.4 no changes
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
- 2.11.4 no changes
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 no changes
-
2.6.7
2017-05-05
- 2.5.6 no changes
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 no changes
-
2.0.5
2014-12-17
СИНОПСИС
gitsubmodule[--quiet] [--cached]gitsubmodule[--quiet]add[<options>] [--] <repository> [<path>]gitsubmodule[--quiet]status[--cached] [--recursive] [--] [<path>…]gitsubmodule[--quiet]init[--] [<path>…]gitsubmodule[--quiet]deinit[-f|--force] (--all|[--] <path>...)gitsubmodule[--quiet]update[<options>] [--] [<path>…]gitsubmodule[--quiet]set-branch[<options>] [--] <path>gitsubmodule[--quiet]set-url[--] <path> <newurl>gitsubmodule[--quiet]summary[<options>] [--] [<path>…]gitsubmodule[--quiet]foreach[--recursive] <command>gitsubmodule[--quiet]sync[--recursive] [--] [<path>…]gitsubmodule[--quiet]absorbgitdirs[--] [<path>…]
ОПИС
Перевіряє, оновлює та керує субмодулями.
Для отримання додаткової інформації про субмодулі див. gitsubmodules[7].
КОМАНДИ
Без аргументів показує стан наявних субмодулів. Для виконання операцій із субмодулями доступні кілька команд.
-
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 ідентичне обчисленню відносних тек).Стандартним віддаленим репозиторієм є віддалений репозиторій гілки remote-tracking поточної гілки. Якщо такої гілки remote-tracking не існує або
HEADє відʼєднаним, то за стандартний віддалений репозиторій вважаєтьсяorigin. Якщо у суперпроєкті не налаштовано стандартний віддалений репозиторій, суперпроєкт є своїм власним авторитетним upstream, і замість нього використовується поточна робоча тека.Необовʼязковий аргумент <path> — це відносне розташування клонованого субмодуля в суперпроєкті. Якщо <path> не вказано, використовується канонічна частина початкового репозиторію (
repoдля/path/to/repo.gitтаfooдляhost.xz:foo/.git). Якщо <path> існує і вже є дійсним репозиторієм Git, то його готують до коміту без клонування. <path> також використовується як логічне імʼя субмодуля в його конфігураційних записах, якщо для вказання логічного імені не використовується--name.Вказана URL-адреса записується в
.gitmodulesдля використання наступними користувачами, які клонують суперпроєкт. Якщо URL-адреса вказана відносно репозиторію суперпроєкту, передбачається, що репозиторії суперпроєкту та субмодулів будуть зберігатися разом в одному відносному місці, і потрібно вказати лише URL-адресу суперпроєкту. git-submodule правильно знайде субмодуль, використовуючи відносну URL-адресу в.gitmodules.Якщо вказано
--ref-format<формат>, формат зберігання посилань щойно клонованих субмодулів буде встановлено відповідно. -
status[--cached] [--recursive] [--] [<path>...] -
Показати стан субмодулів. У результаті буде виведено SHA-1 поточного коміту, вибраного для кожного субмодуля, а також шлях до субмодуля та результат команди git-describe[1] для цього SHA-1. Кожен SHA-1, ймовірно, матиме префікс
-, якщо субмодуль не ініціалізовано,+, якщо коміт субмодуля, що наразі вибрано, не збігається з SHA-1, знайденим в індексі репозиторію, що його містить, таU, якщо у субмодулі є конфлікти злиття.Якщо вказано
--cached, ця команда натомість виведе SHA-1, записаний у суперпрєкті для кожного субмодуля.Якщо вказано
--recursive, ця команда рекурсивно перейде до вкладених субмодулів та також покаже їхній стан.Якщо вас цікавлять лише зміни в поточних ініціалізованих субмодулях відносно коміту, записаного в індексі або в
HEAD, команди git-status[1] та git-diff[1] також нададуть цю інформацію (а також можуть повідомити про зміни в робочому дереві субмодуля). -
init[--] [<path>...] -
Ініціалізація субмодулів, записаних в індексі (які були додані та зафіксовані в іншому місці), шляхом налаштування параметра
submodule.$name.urlу файлі.git/config, використовуючи як шаблон відповідне значення з файлу.gitmodules. Якщо URL-адреса є відносною, вона буде визначена за допомогою стандартного віддаленого репозиторію. Якщо стандартного віддаленого репозиторію немає, поточний репозиторій буде вважатися upstream.Необовʼязкові аргументи <path> обмежують, які субмодулі будуть ініціалізовані. Якщо шлях не вказано, а submodule.active налаштовано, будуть ініціалізовані субмодулі, налаштовані як активні, інакше будуть ініціалізовані всі субмодулі.
Також буде скопійовано значення
submodule.$name.update, якщо воно присутнє у файлі.gitmodules, до.git/config, але (1) ця команда не змінює наявну інформацію в.git/config, та (2)submodule.$name.update, для якого встановлено значення власної команди користувача, не копіюється з міркувань безпеки.Після цього ви можете налаштувати URL-адреси для клонування субмодулів у файлі
.git/configвідповідно до вашої локальної конфігурації та виконати командуgitsubmoduleupdate; ви також можете просто використати командуgitsubmoduleupdate--initбез явного крокуinit, якщо не плануєте змінювати розташування субмодулів.Дивіться субкоманду add для визначення стандартного віддаленого репозиторію.
-
deinit[-f|--force] (--all|[--] <path>...) -
Скасує реєстрацію вказаних субмодулів, тобто видалить весь розділ
submodule.$nameіз файлу .git/config разом із їхнім робочим деревом. Надалі командиgitsubmoduleupdate,gitsubmoduleforeachтаgitsubmodulesyncпропускатимуть усі незареєстровані субмодулі, доки їх не буде знову ініціалізовано, тому скористайтеся цією командою, якщо більше не хочете мати локальну копію субмодуля у своєму робочому дереві.Коли команда виконується без 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>...] -
Оновлює зареєстровані субмодулі відповідно до вимог суперпроєкту шляхом клонування відсутніх субмодулів, завантаження відсутніх комітів у субмодулях та оновлення робочого дерева субмодулів. «Оновлення» можна виконати кількома способами залежно від параметрів командного рядка та значення змінної конфігурації
submodule.<name>.update. Параметр командного рядка має пріоритет над змінною конфігурації. Якщо жоден з них не вказано, виконуєтьсяcheckout. (Примітка: вміст файлу.gitmodulesна цьому етапі не має значення; див.gitsubmoduleinitвище, щоб дізнатися, як використовується.gitmodules). Процедуриupdate, що підтримуються як з командного рядка, так і через конфігураціюsubmodule.<name>.update, такі:-
checkout -
коміт, записаний у суперпроєкті, буде активовано в субмодулі на відокремленому
HEAD.Якщо вказано
--force, субмодуль буде активовано (за допомогоюgitcheckout--force), навіть якщо коміт, вказаний в індексі репозиторію, що містить його, вже відповідає коміту, активованому в субмодулі. -
rebase -
поточна гілка субмодуля буде перебазована на основі коміту, записаного в суперпроєкті.
-
merge -
коміт, записаний у суперпроєкті, буде обʼєднано з поточною гілкою в субмодулі.
Наведені нижче процедури оновлення мають додаткові обмеження:
-
!<custom-command> -
механізм для виконання довільних команд з ідентифікатором коміта як аргументом. Зокрема, якщо змінна конфігурації
submodule.<name>.updateвстановлена на!<custom-command>, імʼя обʼєкта коміта, записане в суперпроєкті для субмодуля, додається до рядка <custom-command> та виконується. Зверніть увагу, що цей механізм не підтримується у файлі.gitmodulesабо в командному рядку. -
none -
субмодуль не оновлюється. Ця процедура оновлення не дозволена в командному рядку.
Якщо субмодуль ще не ініціалізовано, і ви просто хочете використовувати налаштування, що зберігаються в
.gitmodules, ви можете автоматично ініціалізувати субмодуль за допомогою опції--init.Якщо вказано
--recursive, ця команда рекурсивно звернеться до зареєстрованих субмодулів та оновить будь-які вкладені субмодулі всередині них.Якщо вказано
--ref-format<формат>, формат зберігання посилань щойно клонованих субмодулів буде встановлено відповідно.Якщо вказано
--filter<специфікація-фільтра>, до субмодуля буде застосовано вказаний фільтр часткового клонування. Див. git-rev-list[1] для отримання детальної інформації про специфікації фільтрів. -
-
set-branch(-b|--branch) <branch> [--] <path> -
set-branch(-d|--default) [--] <path> -
Встановлює стандартну віддалену гілку відстеження для субмодуля. Опція
--branchдозволяє вказати віддалену гілку. Опція--defaultвидаляє ключ конфігураціїsubmodule.<name>.branch, внаслідок чого стандартною гілкою відстеження стає віддалена гілкаHEAD. -
set-url[--] <path> <newurl> -
Встановлює URL-адресу зазначеного субмодуля на <newurl>. Потім автоматично синхронізує нову конфігурацію віддаленої URL-адреси субмодуля.
-
summary[--cached|--files] [(-n|--summary-limit) <n>] [commit] [--] [<path>...] -
Показати підсумок коміту між вказаним комітом (стандартно —
HEAD) та робочим деревом/індексом. Для відповідного субмодуля показується ланцюжок комітів у субмодулі між вказаним комітом суперпроєкту та індексом або робочим деревом (перемикається за допомогою--cached). Якщо вказано опцію--files, показується серія комітів у субмодулі між індексом суперпроєкту та робочим деревом субмодуля (ця опція не дозволяє використовувати опцію--cachedабо вказувати конкретний коміт).Використання опції
--submodule=logз git-diff[1] також надасть цю інформацію. -
foreach[--recursive] <command> -
Виконати довільну команду оболонки <command> у кожному отриманому субмодулі. Команда має доступ до змінних
$name,$sm_path,$displaypath,$sha1та$toplevel:-
$name -
назва відповідного розділу з субмодулем у файлі
.gitmodules -
$sm_path -
шлях до субмодуля, записаний у безпосередньому суперпроєкті
-
$displaypath -
відносний шлях від поточної рабочої теки до кореневої теки субмодулів
-
$sha1 -
коміт, як він записаний у безпосередньому суперпроєкті
-
$toplevel -
абсолютний шлях до верхнього рівня відповідного суперпроєкту.
Зверніть увагу, що для уникнення конфліктів із
$PATHу Windows змінна$pathтепер є застарілим синонімом змінної$sm_path. Ця команда ігнорує будь-які субмодулі, визначені в суперпроєкті, але не отримані. Якщо не вказано параметр--quiet, foreach виводить ім’я кожного субмодуля перед виконанням команди. Якщо вказано--recursive, субмодулі обходяться рекурсивно (тобто вказана команда оболонки оцінюється також у вкладених субмодулях). Не нульовий результат команди в будь-якому субмодулі призводить до припинення обробки. Це можна перевизначити, додавши ||:в кінець команди.Як приклад, команда нижче покаже шлях та поточний отриманий коміт для кожного субмодуля:
git submodule foreach 'echo $sm_path `git rev-parse HEAD`'
-
-
sync[--recursive] [--] [<path>...] -
Синхронізує налаштування конфігурації віддалених URL-адрес субмодулів з значенням, вказаним у
.gitmodules. Це вплине лише на ті субмодулі, які вже мають запис URL-адреси в.git/config(тобто, коли вони ініціалізовані або щойно додані). Це корисно, коли URL-адреси субмодулів змінюються в upstream, і вам потрібно відповідно оновити ваші локальні репозиторії.gitsubmodulesyncсинхронізує всі субмодулі, тоді якgitsubmodulesync--Aсинхронізує лише субмодульA.Якщо вказано
--recursive, ця команда рекурсивно звернеться до зареєстрованих субмодулів та синхронізує будь-які вкладені субмодулі всередині них. -
absorbgitdirs -
Якщо тека git субмодуля знаходиться всередині самого субмодуля, перенесе цю теку git у теку
$GIT_DIR/modulesсуперпроєкту, а потім зв’яже цю теку git із робочою текою, встановивши параметрcore.worktreeта додавши файл.git, який вказує на теку git, вбудовану в теку git суперпроєкту.У репозиторії, який було клоновано окремо, а згодом додано як субмодуль, або у старих конфігураціях тека git субмодуля знаходиться всередині самого субмодуля, а не вбудована в теку git суперпроєкту.
Ця команда є типово рекурсивною.
ОПЦІЇ
-
-q -
--quiet -
Виводити лише повідомлення про помилки.
-
--progress -
Прогрес роботи зазвичай показується у стандартному потоці помилок, якщо програма приєднана до терміналу, за винятком випадків, коли вказано параметр
-q. Цей параметр примусово виводить інформацію про прогрес, навіть якщо стандартний потік помилок не спрямований в термінал. Це стосується лише командaddтаupdate. -
--all -
Цей параметр дійсний лише для команди
export. Це стосується лише командиdeinit. -
-b<branch> -
--branch=<branch> -
Гілка репозиторію, яку потрібно додати як субмодуль. Назва гілки записується як
submodule.<назва>.branchу.gitmodulesдляupdate--remote. Спеціальне значення.використовується для позначення того, що назва гілки в субмодулі має збігатися з назвою поточної гілки в поточному репозиторії. Якщо опцію не вказано, стандартно використовується віддаленийHEAD. -
-f -
--force -
Примусово виконати команду, навіть якщо за звичайних умов вона завершилася б з помилкою. Ця опція діє лише для команд
add,deinitтаupdate.-
add -
дозволяє додати шлях до субмодуля, який інакше ігнорується. Ця опція також використовується для обходу перевірки на те, чи імʼя субмодуля вже не використовується. Зазвичай команда
gitsubmoduleaddзавершиться з помилкою, якщо запропоноване ім’я (яке утворюється на основі шляху) вже зареєстровано для іншого субмодуля в репозиторії. Використання--forceдозволяє команді продовжити роботу, автоматично генеруючи унікальну назву шляхом додавання номера до конфліктної назви (наприклад, якщо існує субмодуль з назвою child, вона спробує child1 і так далі). -
deinit -
робочі дерева субмодулів будуть видалені, навіть якщо вони містять локальні зміни.
-
update -
(діє лише під час операції checkout), ігнорувати локальні зміни в субмодулях під час переходу до іншого коміту; та завжди виконувати операцію checkout у субмодулі, навіть якщо коміт, зазначений в індексі батьківського репозиторію, збігається з комітом, отриманим у субмодулі.
-
-
--cached -
Використовуйте індекс для визначення коміту замість
HEAD. Ця опція діє лише для командstatusтаsummary. -
--files -
Змушує команду
summaryпорівнювати коміт в індексі з комітом уHEADсубмодуля. -
-n<n> -
--summary-limit=<n> -
Обмежте розмір
summary(загальну кількість показаних комітів) до <n>. Якщо вказати 0, підсумок буде вимкнено; від’ємне число означає необмежену кількість (стандартно). Це обмеження застосовується лише до змінених субмодулів. Для доданих, видалених або таких, у яких змінився тип, розмір завжди обмежується значенням 1. -
--remote -
Замість використання записаного SHA-1 суперпроєкту для оновлення субмодуля, використовуйте стан гілки віддаленого відстеження субмодуля. Ця опція діє лише для команди
update. Використовується віддалений репозиторій гілки (branch.<name>.remote), зазвичай цеorigin. Використовується віддалена гілка, зазвичай це віддаленийHEAD, але імʼя гілки можна змінити, встановивши опціюsubmodule.<name>.branchу файлі.gitmodulesабо.git/config(причому.git/configмає пріоритет).Це працює для будь-якої з підтримуваних процедур оновлення (
--checkout,--rebaseтощо). Єдина зміна — це джерело цільового SHA-1. Наприклад,submoduleupdate--remote--mergeобʼєднає зміни субмодуля upstream з субмодулями, тоді якsubmoduleupdate--mergeобʼєднає зміни gitlink суперпроєкту з субмодулями.Щоб забезпечити поточний стан гілки відстеження,
update--remoteотримує дані з віддаленого репозиторію субмодуля перед обчисленням SHA-1. Якщо ви не хочете отримувати дані, слід використовуватиsubmoduleupdate--remote--no-fetch.Використовуйте цю опцію, щоб інтегрувати зміни з субпроєкту upstream у поточний
HEADвашого субмодуля. Як альтернативу, ви можете виконати командуgitpullіз субмодуля, що є еквівалентним, за винятком імені віддаленої гілки:update--remoteвикористовує стандартне репозиторій upstream таsubmodule.<name>.branch, тоді якgitpullвикористовує гілкуbranch.<name>.mergeсубмодуля. Віддайте перевагуsubmodule.<name>.branch, якщо ви хочете розподілити стандартну гілку upstream із суперпроєктом, іbranch.<name>.merge, якщо ви хочете отримати більш природне відчуття під час роботи в самому субмодулі. -
-N -
--no-fetch -
Не завантажувати нові об’єкти з віддаленого сервера. Ця опція діє лише для команди
update. -
--checkout -
Виконати checkout коміту, записаного в суперпроєкті, на відокремленому
HEADу підмодулі. Ця опція діє лише для командиupdate. Це стандартна поведінка; основне призначення цієї опції — замінити значенняsubmodule.<name>.update, якщо воно встановлено на значення, відмінне відcheckout. Якщо ключsubmodule.<name>.updateявно не встановлено або встановлено наcheckout, ця опція застосовується неявним чином. -
--merge -
Обʼєднати коміт, записаний у суперпроєкті, з поточною гілкою субмодуля. Ця опція діє лише для команди
update. Якщо вказано цю опцію,HEADсубмодуля не буде від’єднано. Якщо цей процес не вдається виконати через помилку злиття, вам доведеться усунути конфлікти, що виникли в субмодулі, за допомогою звичайних інструментів розвʼязання конфліктів. Якщо ключsubmodule.<name>.updateвстановлено наmerge, ця опція є неявною. -
--rebase -
Виконати перебазування поточної гілки на коміт, записаний у суперпроєкті. Ця опція діє лише для команди
update. ПокажчикHEADсубмодуля не буде відʼєднано. Якщо цей процес неможливий через помилки злиття, вам доведеться усунути ці помилки за допомогою команди git-rebase[1]. Якщо для ключаsubmodule.<name>.updateвстановлено значенняrebase, ця опція є неявною. -
--init -
Перед оновленням ініціалізувати всі субмодулі, для яких до цього моменту не було виконано команду
gitsubmoduleinit. Ця опція діє лише для командиupdate. -
--name=<name> -
Встановити імʼя субмодуля на заданий рядок замість використання типового шляху. <name> має бути допустимим іменем теки і не може закінчуватися символом
/. -
--reference=<repository> -
Під час клонування субмодуля передати локальний <репозиторій> як посилання. Ця опція діє лише для команд
addтаupdate. Іноді цим командам потрібно клонувати віддалений репозиторій. У такому випадку ця опція буде передана команді git-clone[1].NoteНе використовуйте цю опцію, якщо ви уважно не прочитали примітку до опцій --reference,--sharedта--dissociateу git-clone[1]. -
--dissociate -
Після використання референтного репозиторію для клонування більше не слід покладатися на нього. Ця опція діє лише для команд
addтаupdate. Іноді цим командам потрібно клонувати віддалений репозиторій. У такому випадку ця опція передаватиметься команді git-clone[1].NoteДив. ПРИМІТКИ вище щодо опції --reference. -
--recursive -
Рекурсивний перехід між субмодулями. Ця опція дійсна лише для команд
foreach,update,statusтаsync. Операція виконується не лише в субмодулях поточного репозиторію, але й у будь-яких вкладених субмодулях всередині цих субмодулів (і так далі). -
--depth=<depth> -
Створити поверхневий клон з історією, скороченою до <depth> ревізій. Ця опція доступна для команд
addтаupdate. Див. git-clone[1] -
--recommend-shallow -
--no-recommend-shallow -
Рекомендувати чи ні поверхневе клонування субмодулів. Ця опція діє лише для команди
update. Під час початкового клонування субмодуля зазвичай використовується рекомендований форматsubmodule.<name>.shallow, який стандартно вказано у файлі.gitmodules. Щоб проігнорувати ці рекомендації, скористайтеся опцією--no-recommend-shallow. -
-j<n> -
--jobs=<n> -
Клонувати нові субмодулі паралельно з якомога більшою кількістю завдань. Цей параметр дійсний лише для команди
update. Зазвичай використовується параметрsubmodule.fetchJobs. -
--single-branch -
--no-single-branch -
Під час оновлення клонувати лише одну гілку:
HEADабо ту, що вказано за допомогою параметра--branch. Цей параметр діє лише для командиupdate. - <шлях>...
-
Шляхи до субмодуля(ів). Якщо вказано, це обмежить роботу команди лише субмодулями, знайденими за вказаними шляхами. (Цей аргумент обовʼязковий для
add).
ФАЙЛИ
Під час ініціалізації субмодулів використовується файл .gitmodules у теці верхнього рівня репозиторію, що містить субмодулі, для пошуку URL-адреси кожного субмодуля. Цей файл має бути відформатований так само, як $GIT_DIR/config. Ключ до URL-адреси кожного субмодуля — submodule.<name>.url. Докладніше див. у gitmodules[5].
GIT
Частина набору git[1]