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

Re: Git submodule update remote keeps using previous default branch

From
Bryan Turner <bturner@atlassian.com>
Date
Oct 15, 2021, 09:05 UTC
Message-ID
<CAGyf7-HZirxc0qoD1u9a3jx4egsjq=-Mdy_HCf2o-oWBrdUX+A@mail.gmail.com>
In-Reply-To
<CAA1vfca+kPSsitsZad-bmrd+o1ay60NXZrH2zGLpwN69Px-rtw@mail.gmail.com>

On Fri, Oct 15, 2021 at 1:35 AM Sjoerd Langkemper <sjoerd-2021@linuxonly.nl> wrote:

Show 21 quoted lines
>
> I am having trouble with git 2.33.1 checking out the wrong branch for
> submodules for which the default branch has changed. `git submodule
> update --remote` seems to remember the branch name to retrieve, while
> I expect it to use the remote HEAD every time. This causes unexpected
> behaviour when the remote HEAD starts pointing to another branch.
>
> I create a new git project and add a submodule, with `git submodule
> add git@host:foo/testproject.git`.
>
> This checks out the default branch, `master` in this case. `git remote
> show origin` also shows that `master` is the HEAD branch. Running `git
> submodule update --remote` updates the submodule to the latest master.
>
> Now I change the default branch on the remote (using Gitlab's web
> interface) to `newmaster`.
>
> `git remote show origin` now correctly shows `newmaster` as the
> remote's HEAD branch. However, running `git submodule update --remote`
> still updates the submodule to the latest `master` branch, while I
> expect it to update to the lastest `newmaster` branch.

I suspect this is going to be the same answer I gave on the last thread about submodules[1]. Submodules in Git store the _commit ID_ they point to in the tree, but they do not store a _ref name_, nor do they have some indicator for "It was the default branch". They choose a ref by (essentially) looping over the refs from the remote (which are always sent in alphabetical order) and choosing the first one with a matching SHA. If your "newmaster" is alphabetically after "master", and "master" still exists, and both refs point to the same commit (or only "master" points to it), I suspect your submodule is going to choose that.

[1] https://lore.kernel.org/git/CAGyf7-FAHJOb6iQYqYNt0WSk+zUHUJ_FjrU1xis1bBQd9Z6KPQ@mail.gmail.com/
Show 7 quoted lines
>
> There's no branch specified in .gitmodules or .git/config. I am not
> sure how git remembers the branch. When switching `testproject` to
> `newmaster` manually and then running `git submodule update --remote`,
> it is reset to `master` again.
>
> Is this a bug? Can I change the branch somehow?

If you updated the submodule to reference a commit that was on "newmaster" and not present on "master", I think it'd change.

>
> Regards,
>
> Sjoerd Langkemper
Previous: Sjoerd LangkemperNext: Sjoerd Langkemper
Message 2 of 3 in “Git submodule update remote keeps using previous default branch”
  1. Sjoerd LangkemperOct 15, 2021
  2. Bryan TurnerOct 15, 2021
  3. Sjoerd LangkemperOct 15, 2021

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.