На 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, чтобы получить подмодуль с репозиторием.
Во-первых, убедитесь, что удаленный 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
правильно импортирован туда.
Клонирование в другую папку работает. Я бы лучше понял, почему он сломался. Но это решило проблему.