threads / discuss / 40770

git clone --recursive should run git submodule update with flag --remote

Subject: git clone --recursive should run git submodule update with flag --remote

## tl;dr

2 messages between Nov 11, 2015 and Nov 11, 2015.

replies: 1people: 2as markdown or json

Stanislav· Nov 11, 2015, 12:46 UTC · lore
Consider two repositories, A and B.
Repo A is embedded into B by using submodule:
  git submodule add -b master <url-to-A> sub-a
So, submodule sub-a is set to track master branch of the repo A.

Running git submodule update --remote inside repo B will automatically update and checkout submodule sub-a to the latest master commit (as expected).

However, when using git clone --recursive <url-to-B>, repo B will be cloned with submodule A checkouted to the commmit which was recorded on git submodule add command, not the master commit.

Expected behaviour is to automatically update checkout commit pointed by branch, that was specified by -b flag in the git submodule add invocation.

Reason for this behaviour is that line:
  https://github.com/git/git/blob/master/builtin/clone.c#L99
I guess, it should be changed to include --remote flag.
Stefan Beller· Nov 11, 2015, 19:48 UTC · re: Stanislav · lore

Re: git clone --recursive should run git submodule update with flag --remote

On Wed, Nov 11, 2015 at 4:46 AM, Stanislav <s.seletskiy@gmail.com> wrote:
Show 17 quoted lines
> Consider two repositories, A and B.
>
> Repo A is embedded into B by using submodule:
>
>   git submodule add -b master <url-to-A> sub-a
>
> So, submodule sub-a is set to track master branch of the repo A.
>
> Running git submodule update --remote inside repo B will automatically
> update and checkout submodule sub-a to the latest master commit (as expected).
>
> However, when using git clone --recursive <url-to-B>, repo B will be cloned
> with submodule A checkouted to the commmit which was recorded on git
> submodule add command, not the master commit.
>
> Expected behaviour is to automatically update checkout commit pointed by
> branch, that was specified by -b flag in the git submodule add invocation.

To achieve what you want to do, you can first clone B and then do a `git submodule update` using the --remote option yourself. That is cumbersome however, I agree.

Show 6 quoted lines
>
> Reason for this behaviour is that line:
>
>   https://github.com/git/git/blob/master/builtin/clone.c#L99
>
> I guess, it should be changed to include --remote flag.

I guess we could tweak the behavior to include the --remote flag when the branch is recorded in the .gitmodules file.

Just wondering what should happen if there are both a sha1 and a branch recorded?

Show 5 quoted lines
>
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

← back to recent threads