]> git.ipfire.org Git - thirdparty/git.git/commit - submodule.c
rm: delete .gitmodules entry of submodules removed from the work tree
authorJens Lehmann <Jens.Lehmann@web.de>
Tue, 6 Aug 2013 19:15:25 +0000 (21:15 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 6 Aug 2013 21:11:00 +0000 (14:11 -0700)
commit95c16418f0375e2fc325f32c3d7578fba9cfd7ef
tree70eda70133f2ad444a1040af0ede8f28b85ac749
parent0656781fadca17cc51fb1c30f265c251ebe12819
rm: delete .gitmodules entry of submodules removed from the work tree

Currently using "git rm" on a submodule removes the submodule's work tree
from that of the superproject and the gitlink from the index. But the
submodule's section in .gitmodules is left untouched, which is a leftover
of the now removed submodule and might irritate users (as opposed to the
setting in .git/config, this must stay as a reminder that the user showed
interest in this submodule so it will be repopulated later when an older
commit is checked out).

Let "git rm" help the user by not only removing the submodule from the
work tree but by also removing the "submodule.<submodule name>" section
from the .gitmodules file and stage both. This doesn't happen when the
"--cached" option is used, as it would modify the work tree. This also
silently does nothing when no .gitmodules file is found and only issues a
warning when it doesn't have a section for this submodule. This is because
the user might just use plain gitlinks without the .gitmodules file or has
already removed the section by hand before issuing the "git rm" command
(in which case the warning reminds him that rm would have done that for
him). Only when .gitmodules is found and contains merge conflicts the rm
command will fail and tell the user to resolve the conflict before trying
again.

Also extend the man page to inform the user about this new feature. While
at it promote the submodule sub-section to a chapter as it made not much
sense under "REMOVING FILES THAT HAVE DISAPPEARED FROM THE FILESYSTEM".

In t7610 three uses of "git rm submod" had to be replaced with "git rm
--cached submod" because that test expects .gitmodules and the work tree
to stay untouched. Also in t7400 the tests for the remaining settings in
the .gitmodules file had to be changed to assert that these settings are
missing.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-rm.txt
builtin/rm.c
submodule.c
submodule.h
t/t3600-rm.sh
t/t7400-submodule-basic.sh
t/t7610-mergetool.sh