Git WindowsLinuxmacOSGit

Git: После клонирования репозитория отсутствуют подмодули

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

После git clone папки зависимых репозиториев могут оставаться пустыми или не содержать нужных файлов, если проект использует подмодули Git. Обычное клонирование не всегда инициализирует подмодули; их список и адреса определяются файлом .gitmodules.

В этой статье
  1. Как проявляется ошибка и когда применим способ
  2. Причины и признаки
  3. Пошаговая диагностика и решение
  4. Проверка результата и действия при повторении

#Как проявляется ошибка и когда применим способ

После git clone папки зависимых репозиториев могут оставаться пустыми или не содержать нужных файлов, если проект использует подмодули Git. Обычное клонирование не всегда инициализирует подмодули; их список и адреса определяются файлом .gitmodules.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Подмодули не инициализированыОсновной репозиторий содержит gitlink, но рабочая копия вложенного репозитория ещё не загружена.git submodule status выводит строки с префиксом «-».Инициализировать и скачать подмодули.
Нет доступа к адресу подмодуляОсновной репозиторий открыт, а вложенный приватный или перемещён.git submodule update сообщает о невозможности клонирования.Проверить URL и права доступа отдельно.

#Пошаговая диагностика и решение

  1. 1. Проверьте наличие .gitmodulesОткройте корневой каталог проекта через Проводник или файловый менеджер, включите показ скрытых файлов. Найдите .gitmodules и прочитайте записи path и url. Если файла нет и git submodule status пуст, возможно проект не использует подмодули; не создавайте их наугад.
  1. 2. Посмотрите состояние подмодулейВ терминале корня репозитория выполните git submodule status --recursive. Строка с дефисом перед хешем указывает на неинициализированный подмодуль, плюс — несовпадение его текущей фиксации с требуемой. Запишите пути проблемных каталогов.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)Команда
    Чтение состояния всех вложенных репозиториев; рекурсивный режим включает подмодули подмодулей.
    git submodule status --recursive
  1. 3. Сверьте происхождение ссылокОткройте .gitmodules и проверьте каждый url. Для приватных адресов уточните, есть ли у вашего аккаунта чтение этих репозиториев. Не вставляйте пароль в адрес и не меняйте на чужой домен ради успешного клонирования.
  1. 4. Сделайте резерв локальных правок подмодулейЕсли папки уже содержат изменения, проверьте их состояние отдельно из соответствующего каталога. Команда update по умолчанию приводит вложенный репозиторий к фиксации из основного; локальные несохранённые изменения могут помешать. Прежде чем продолжать, сохраните их вне проекта.
  1. 5. Инициализируйте отсутствующие подмодулиВ доверенной копии выполняйте git submodule update --init --recursive. Команда скачает вложенные репозитории и установит фиксации, указанные основным проектом. Если видите запрос учётных данных, используйте обычный метод входа провайдера; не раскрывайте секреты в журнале.
  2. Может загрузить данные из сети и изменить содержимое каталогов подмодулей; без sudo
    Linux · Терминал (Bash)С осторожностью
    Может загрузить данные из сети и изменить содержимое каталогов подмодулей; без sudo.
    git submodule update --init --recursive

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 6. При смене адреса синхронизируйте конфигурациюТолько если .gitmodules корректно обновлён в доверенном репозитории, запустите git submodule sync --recursive, затем снова update. Команда sync обновляет локально настроенные URL, а не разрешения на сервере. Если адрес стал недоступным, обратитесь к владельцу репозитория.
  2. Используйте при подтверждённой смене адресов; меняет локальную конфигурацию подмодулей
    Linux · Терминал (Bash)С осторожностью
    Используйте при подтверждённой смене адресов; меняет локальную конфигурацию подмодулей.
    git submodule sync --recursive

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 7. Проверьте файлы и зафиксированные ревизииПовторите git submodule status --recursive и осмотрите папки подмодулей. Если вместо нужного содержимого всё ещё пусто, проверьте фильтры доступа и выбранную ветку основного проекта; не клонируйте произвольный репозиторий поверх подмодуля.

#Проверка результата и действия при повторении

Успех: в подмодулях есть нужные файлы, git submodule status --recursive не содержит префикса «-» и показывает ожидаемые фиксации. Сборка основного проекта на тестовой копии находит зависимости.

Если на указанном шаге результат отличается, остановитесь и запишите первое полное сообщение об ошибке, версию инструментов и проверенное состояние до исправления. Не переходите к опасным действиям на действующем проекте: повторите проверку на отдельной копии, верните сохранённые файлы и только затем выбирайте следующую причину.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.