mirror of
https://github.com/git/git
synced 2024-08-28 12:09:19 +00:00
Make 'git submodule update --force' always check out submodules.
Currently, it will only do a checkout if the sha1 registered in the containing repository doesn't match the HEAD of the submodule, regardless of whether the submodule is dirty. As discussed on the mailing list, the '--force' flag is a strong indicator that the state of the submodule is suspect, and should be reset to HEAD. Signed-off-by: Stefan Zager <szager@google.com> Acked-by: Jens Lehmann <Jens.Lehmann@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
e6dfbcf12b
commit
01d4721565
|
@ -149,6 +149,11 @@ submodule with the `--init` option.
|
|||
+
|
||||
If `--recursive` is specified, this command will recurse into the
|
||||
registered submodules, and update any nested submodules within.
|
||||
+
|
||||
If `--force` is specified, the submodule will be checked out (using
|
||||
`git checkout --force` if appropriate), even if the commit specified in the
|
||||
index of the containing repository already matches the commit checked out in
|
||||
the submodule.
|
||||
|
||||
summary::
|
||||
Show commit summary between the given commit (defaults to HEAD) and
|
||||
|
@ -210,7 +215,9 @@ OPTIONS
|
|||
This option is only valid for add and update commands.
|
||||
When running add, allow adding an otherwise ignored submodule path.
|
||||
When running update, throw away local changes in submodules when
|
||||
switching to a different commit.
|
||||
switching to a different commit; and always run a checkout operation
|
||||
in the submodule, even if the commit listed in the index of the
|
||||
containing repository matches the commit checked out in the submodule.
|
||||
|
||||
--cached::
|
||||
This option is only valid for status and summary commands. These
|
||||
|
|
|
@ -537,7 +537,7 @@ Maybe you want to use 'update --init'?")"
|
|||
die "$(eval_gettext "Unable to find current revision in submodule path '\$sm_path'")"
|
||||
fi
|
||||
|
||||
if test "$subsha1" != "$sha1"
|
||||
if test "$subsha1" != "$sha1" -o -n "$force"
|
||||
then
|
||||
subforce=$force
|
||||
# If we don't already have a -f flag and the submodule has never been checked out
|
||||
|
|
|
@ -123,6 +123,18 @@ test_expect_success 'submodule update should throw away changes with --force ' '
|
|||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submodule update --force forcibly checks out submodules' '
|
||||
(cd super &&
|
||||
(cd submodule &&
|
||||
rm -f file
|
||||
) &&
|
||||
git submodule update --force submodule &&
|
||||
(cd submodule &&
|
||||
test "$(git status -s file)" = ""
|
||||
)
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submodule update --rebase staying on master' '
|
||||
(cd super/submodule &&
|
||||
git checkout master
|
||||
|
|
Loading…
Reference in a new issue