Instantly share code, notes, and snippets.

Embed
What would you like to do?
#!/bin/sh
#
# Adam Sharp
# Aug 21, 2013
#
# Usage: Add it to your PATH and `git remove-submodule path/to/submodule`.
#
# Does the inverse of `git submodule add`:
# 1) `deinit` the submodule
# 2) Remove the submodule from the index and working directory
# 3) Clean up the .gitmodules file
#
submodule_name=$(echo "$1" | sed 's/\/$//'); shift
exit_err() {
[ $# -gt 0 ] && echo "fatal: $*" 1>&2
exit 1
}
if git submodule status "$submodule_name" >/dev/null 2>&1; then
git submodule deinit -f "$submodule_name"
git rm -f "$submodule_name"
git config -f .gitmodules --remove-section "submodule.$submodule_name"
if [ -z "$(cat .gitmodules)" ]; then
git rm -f .gitmodules
else
git add .gitmodules
fi
else
exit_err "Submodule '$submodule_name' not found"
fi
@slintz

This comment has been minimized.

slintz commented Jul 6, 2017

I didn't run the script, but manually followed the steps - GREAT HELP!

One adjustment: git version 2.10.2 complains on line-23: fatal: not removing 'Abc/' recursively without -r So I reran with the extra flag and joy-joy! Someone (@sharplet ?) should fix that...

@melMass

This comment has been minimized.

melMass commented Jun 29, 2018

Thanks for this gist.

Line 25 is unnecessary. Git does remove it from the config now on git submodule deinit -f

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment