Created
April 25, 2012 16:36
git submodule-rm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
function actual_path() { | |
if [ [ -z "$1" ] -a [ -d $1 ] ]; then | |
echo $(cd $1 && test `pwd` = `pwd -P`) | |
return 0 | |
else | |
return 1 | |
fi | |
} | |
function is_submodule() { | |
local top_level parent_git module_name | |
if [ -d "$1" ]; then | |
cd $1 | |
else | |
return 1 | |
fi | |
# Find the root of this git repo, then check if its parent dir is also a repo | |
top_level="$(git rev-parse --show-toplevel)" | |
if [ ! actual_path $toplevel ]; then | |
top_level="$(cd $top_level && pwd -P)" | |
fi | |
module_name="$(basename "$top_level")" | |
parent_git="$(cd "$top_level/.." && git rev-parse --show-toplevel 2> /dev/null)" | |
if [[ -n $parent_git ]]; then | |
return 0 | |
else | |
return 1 | |
fi | |
} | |
function is_gitroot() { | |
if [ "$(pwd -P)" = "$(git rev-parse --show-toplevel)" ]; then | |
return 0 | |
else | |
return 1 | |
fi | |
} | |
# first check if it's a valid path | |
if [ ! -d "$1" ]; then | |
echo "Usage: git submodule rm <path>" | |
exit | |
fi | |
# then check whether we're at git root | |
if is_gitroot; then | |
# finally check whether the given path is a submodule | |
if $(is_submodule "${1}"); then | |
echo "let's remove those submodules" | |
# using ${1%/} to remove trailing slashes | |
git config -f .gitmodules --remove-section submodule.${1%/} | |
git config -f .git/config --remove-section submodule.${1%/} | |
git rm --cached ${1%/} | |
else | |
echo "git submodule rm is not recursive yet, aborting." | |
fi | |
else | |
echo "You need to run this command from the toplevel of the working tree." | |
fi |
@henrik I guess those files only show up if you clone and git init.
Great. I've added a test to see if .git/modules
exists and quoted the paths. Feel free to merge.
@barraponto I think I googled and then followed the link from http://stackoverflow.com/questions/1260748/how-do-i-remove-a-git-submodule
Yep, same here.
Oh, the problem is that this script doesn't work when the submodule is not at the top level of the super-module! Back to "doing it manually," I guess :-P
This one actually works: https://github.com/kollerma/git-submodule-tools/blob/master/git-rm-submodule
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Oops, tried
git rm ${1%/}
and that didn't work, even with-rf
. So both lines are needed.