How do I get rid of submodules when switching branches. I do not understand why git clean says it removed the submodule but does not. Is this a bug? Below are cut&paste steps to reproduce.
git --version
git version 1.7.8.4
git init submod
cd submod
echo "This is a submodule" > README.txt
git add .
git commit -m "Initial commit"
cd ..
git init prog
cd prog
echo "This is a program" > README.txt
git add .
git commit -a -m "Initial commit"
git checkout -b topic1
git submodule add ../submod
git commit -m "Added submodule"
git checkout master
#warning: unable to rmdir submod: Directory not empty
#Switched to branch 'master'
git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# submod/
#nothing added to commit but untracked files present (use "git add" to track)
git clean -fd
#Removing submod/
git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# submod/
#nothing added to commit but untracked files present (use "git add" to track)
This isn’t a bug, it’s documented behaviour. From
man git-clean:The
submoddirectory is a differentgitrepository; if you want to remove it,Use -f option twice if you really want to remove such a directory.git clean -f -f -d submoddoes removesubmod. See my steps below (almost identical; differentgit versionand hard-codedsubmodulepath because otherwisegitspits the dummy).Steps
Make the two repositories
Add
submodas agit submoduleintopic1branch.Now for the interesting section.
Attempt to
git-clean, then actuallygit-clean.