Stefan Zager <szager@xxxxxxxxxx> writes: > 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@xxxxxxxxxx> > --- Thanks for a reroll. Will queue; looking good ;-) > Documentation/git-submodule.txt | 9 ++++++++- > git-submodule.sh | 2 +- > t/t7406-submodule-update.sh | 12 ++++++++++++ > 3 files changed, 21 insertions(+), 2 deletions(-) > > diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt > index fbbbcb2..2de7bf0 100644 > --- a/Documentation/git-submodule.txt > +++ b/Documentation/git-submodule.txt > @@ -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 > diff --git a/git-submodule.sh b/git-submodule.sh > index aac575e..3aa7644 100755 > --- a/git-submodule.sh > +++ b/git-submodule.sh > @@ -578,7 +578,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 > diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh > index ce61d4c..9706436 100755 > --- a/t/t7406-submodule-update.sh > +++ b/t/t7406-submodule-update.sh > @@ -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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html