Skip to content

Instantly share code, notes, and snippets.

@azizur
Forked from sharplet/git-remove-submodule
Last active August 29, 2015 14:17
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save azizur/10c814ae16a9d75d4e42 to your computer and use it in GitHub Desktop.
Save azizur/10c814ae16a9d75d4e42 to your computer and use it in GitHub Desktop.
#!/bin/sh
#
# Adam Sharp
# Aug 21, 2013
#
# Usage: Add it to your PATH and `git remove-submodule path/to/submodule`.
#
# Change to a directory that’s in your PATH, I used /usr/local/bin and run the following commands:
#
# $ curl -o git-remove-submodule https://gist.githubusercontent.com/azizur/10c814ae16a9d75d4e42/raw/fa7b5e9c30a0118d51625dd038e363aceefd382c/git-remove-submodule
#
# $ chmod 755 git-remove-submodule
#
# Then to remove a submodule run:
#
# $ 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment