Вот 4 шага, которые я нашел необходимыми или полезными (важными в первую очередь):
git rm -f the_submodule
rm -rf .git/modules/the_submodule
git config -f .git/config --remove-section submodule.the_submodule
git commit -m "..."
Теоретически git rm
в шаг 1 должен позаботиться о Это. Надеюсь, на вторую часть вопроса ОП можно ответить положительно в один прекрасный день (это можно сделать по одной команде).
Но с июля 2017 года шаг 2 необходим для удаления данных в .git/modules/
, в противном случае вы не можете, например. добавьте подмодуль в будущем.
Возможно, вам удастся избежать вышеупомянутых двух шагов для git 1.8.5+, поскольку ответ tinlyx отмечен, поскольку все команды git submodule
, похоже, работают.
Шаг 3 удаляет секцию для the_submodule
в файле .git/config
. Это необходимо сделать для полноты. (Запись может вызвать проблемы для старых версий git, но у меня нет возможности ее протестировать).
Для этого в большинстве ответов рекомендуется использовать git submodule deinit
. Я нахожу его более явным и менее запутанным для использования git config -f .git/config --remove-section
. Согласно документации git-subodule , git deinit
:
Отменить регистрацию данных подмодулей ... Если вы действительно хотите удалить подмодуль из репозитория и зафиксировать его Вместо этого используйте git-rm [1].
И последнее, но не менее важное: если вы не
git commit
, вы будете / могут получить ошибку при выполненииgit submodule summary
(по состоянию на git 2.7):fatal: Not a git repository: 'the_submodule/.git' * the_submodule 73f0d1d...0000000:
Это независимо от того, выполняете ли вы шаги 2 или 3.