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