git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Make 'git submodule update --force' always check out submodules.

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 23, 2012, 01:43 UTC
Message-ID
<7v8vd65qob.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20120822233610.710C01C2DAF@stefro.sfo.corp.google.com>
Stefan Zager <szager@google.com> writes:
Show 8 quoted lines
> 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>
> ---
Thanks for a reroll.  Will queue; looking good ;-)
Show 68 quoted lines
>  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
Previous: Stefan ZagerNext: Jens Lehmann
Message 2 of 3 in “Make 'git submodule update --force' always check out submodules.”
  1. Make 'git submodule update --force' always check out submodules.Stefan Zager, Jul 25, 2012
  2. Junio C HamanoAug 23, 2012
  3. Jens LehmannAug 23, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.