Почему я не могу получить этот подмодуль из репозитория git?

На Github есть два репозитория. Repo1 и Module1

Ранее я клонировал оба этих репозитория на свой локальный компьютер с Windows с помощью Github Desktop, и два репозитория существуют в следующих двух папках:

  • C:\Users\Me\Documents\GitHub\Repo1
  • C:\Users\Me\Documents\GitHub\Module1

Теперь кто-то добавил Module1 в качестве подмодуля Repo1, и когда я смотрю на Github онлайн, я вижу, что Module1 существует под Repo1\submodules.

Если я перехожу в командную строку и запускаю следующую команду в папке Repo1, git submodule update --init, я получаю пару ошибок. Во-первых, из git CLI я вижу вывод:

Submodule 'submodules/Module1' (https://github.com/MyOrg/Module1.git) registered for path 'submodules/Module1'
fatal: not a git repository: C:/Users/Me/Documents/GitHub/Repo1/submodules/Module1/../../.git/modules/submodules/Module1
Failed to clone 'submodules/Module1'. Retry scheduled
BUG: submodule considered for cloning, doesn't need cloning any more?
fatal: could not get a repository handle for submodule 'submodules/Module1'

И в Github Desktop он начинает говорить:

Can't find "Repo1"
It was last seen at C:\Users\Me\Documents\GitHub\Repo1

После этого на моей локальной машине появился новый файл C:\Users\Me\Documents\GitHub\Repo1\submodules\Module1\.git со следующим содержимым:

gitdir: ../../.git/modules/submodules/Module1

И если я удалю этот файл, Github Desktop снова начнет распознавать репо. Но попытка получить репо не приводит к подмодулю Module1. В итоге я получаю пустую папку C:\Users\Me\Documents\GitHub\Repo1\submodules\Module1 на своем локальном компьютере.

Это заставляет меня думать, что когда подмодуль был добавлен из другой архитектуры (Linux / Mac), каким-то образом путь был жестко запрограммирован, и он ищет не в том месте. Но я не совсем уверен, как работает эта функциональность подмодуля, и я не уверен, куда идти дальше. Мне нужен Github Desktop или Git CLI, чтобы получить подмодуль с репозиторием.


52
1

Ответ:

Решено

Во-первых, убедитесь, что удаленный Repo1 репозиторий GitHub правильно ссылается Module1 в .gitmodules файле.
Вы должны увидеть в нем:

[submodule "Module1"]
        path = submodules/Module1
        url = https://github.com/aUser/Module1

Во-вторых, попробуйте для тестирования снова клонировать Repo1 в другую папку, используя опцию clone --recurse-submodules:

git clone --recurse-submodules https://github.com/aUser/Repo1

Затем откройте GitHub Desktop и укажите ссылку на этот новый Repo1 клон.
Убедитесь, что Module1 правильно импортирован туда.