Добавьте подмодуль, который нельзя удалить из индекса

Я пытаюсь добавить уже существующий подмодуль (другой 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"

Попробуйте еще раз добавить субмодуль