Добавьте подмодуль, который нельзя удалить из индекса
Я пытаюсь добавить уже существующий подмодуль (другой git удаленный репозиторий). Поскольку я не искал, прежде чем делать это правильно, я думаю, что я испортил свой репозиторий, и мне нужна помощь, чтобы исправить его снова.
Я уже удалил все соответствующие разделы из .gitmodules и .git/config относительно субмодулей, которые я хочу удалить. Я также подтвердил, что в моем каталоге .git/не существует каталога модулей.
Однако, когда я запускаю команду git rm --cached path_to_submodule
, отображается следующее сообщение:
fatal: pathspec 'path_to_submodule' did not match any files
По мере отказа предыдущей команды, когда я пытаюсь добавить снова тот же подмодуль с новыми определениями, выполнив команду git submodule add [email protected]:repo.git
, это будет отображаемое сообщение:
'repo' already exists in the index
Ответы
Ответ 1
Единственным способом отображения сообщения ('repo' already exists in the index
) является то, что в индексе все еще существует "репо" (см. в этой главе о подмодуле):
$ rm -Rf rack/
$ git submodule add [email protected]:schacon/rack.git rack
'rack' already exists in the index
You have to unstage the rack directory first. Then you can add the submodule:
$ git rm -r rack
$ git submodule add [email protected]:schacon/rack.git rack
Даже если "rack
" не является подмодулем, если он существует, это предотвратит объявление подмодуля с тем же именем.
Ответ 2
Если выход, добавляющий новый подмодуль, следующий:
'FolderName' already exists in the index
Назовите следующие команды
git ls-files --stage
Результат будет похож на:
160000 d023657a21c1bf05d0eeaac6218eb5cca8520d16 0 FolderName
Затем, чтобы удалить подсказку индекса папки:
git rm -r --cached FolderName
Попробуйте еще раз добавить подмодуль
Ответ 3
Может произойти при слиянии с ошибкой, ручном удалении папки подмодуля или что-то еще, например Hallileo Comet
-
в файле .gitmodules
- удалить ссылки на подмодуль (целая секция с именем подмодуля)
-
в файле .git\config
- удалить ссылки на подмодуль, как на предыдущем шаге
-
в папке .git\modules
- удалить папку с относительным путем, аналогичным относительному пути к "проблемному" модулю
-
убедитесь, что папка субмодуля больше не существует
-
то
$ git submodule add -f --name <name> <git://path_1.git> <path_2>
где: name - имя субмодуля как u wish, может быть равно вашему имени repo
; - путь к исходному репо-подмодулю (т.е. github и т.д.), - относительный путь к папке, в которой будет находиться подмодуль
это позволяет u добавлять подмодуль внутри пути или с именем, которое все еще присутствует в индексе, но не естественно живым.
Я не нашел никакого способа удалить эти мертвые ссылки из индекса, но когда принудительный
Ответ 4
'подмодули/uasdk-clib уже существуют в индексе
git rm -r - кэшированные подмодули /uasdk -clib
git subodule add -b china/release/16.8.0 -f ssh:// git @xxx-ios-uasdk.git подмодули/uasdk-clib
Ответ 5
это потому, что у вас есть папка в вашем репо с тем же именем, что и имя вашего субмодуля
$ git rm -r subModuleName
$ git submodule add "your submodule repo path without these quotes"
Попробуйте еще раз добавить субмодуль