Re: issue with submodules using origin remote unexpectadly
- From
Glen Choo <chooglen@google.com>
- Date
- Oct 4, 2022, 18:12 UTC
- Message-ID
- <kl6lzgeblap2.fsf@chooglen-macbookpro.roam.corp.google.com>
- In-Reply-To
- <CA+P7+xrnAXceHJbBYV8Z9Ay9xbkzpiX3P0wXLwN7jfnifW2OBQ@mail.gmail.com>
Hi Jacob! Thanks for the report!
I think we'd need a bit more info, specifically:
- How did you rename the remote? - What command is doing the submodule fetch?
Or, if you could include a reproduction script, that would be really helpful :)
Jacob Keller <jacob.keller@gmail.com> writes:
Show 5 quoted lines
> Hi, > > I've been running into an issue with submodules trying to fetch using > "origin" even though the submodule does not have a remote by that > name. (I recently switched the submodule remote name)
How did you rename the remote? e.g. did you run `git remote rename`, or did you rename it manually? I'll come back to why this might be important...
Show 20 quoted lines
> > remote: Enumerating objects: 210, done. > remote: Counting objects: 100% (207/207), done. > remote: Compressing objects: 100% (54/54), done. > remote: Total 210 (delta 123), reused 197 (delta 119), pack-reused 3 > Receiving objects: 100% (210/210), 107.20 KiB | 4.29 MiB/s, done. > Resolving deltas: 100% (123/123), completed with 48 local objects. > From <redacted> > ... > Fetching submodule submodule > From <redacted> > 85e0da7533d9..80cc886f1187 <redacted> > Fetching submodule submodule2 > fatal: 'origin' does not appear to be a git repository > fatal: Could not read from remote repository. > > Please make sure you have the correct access rights > and the repository exists. > Errors during submodule fetch: > submodule2
I assume this is `git fetch` running in the superproject?
Show 7 quoted lines
> I thought at first there might be some configuration value in the > parent that is selecting origin, but I can 't find one. I also thought > maybe its some sort of defaulting to origin but I looked through > submodule code and didn't find one. > > Is it just that submodule code is not resilient against changing the > default remote name away from origin?
Yes, in a sense, though I'm not sure if this is the source of your problems.
When fetching with `git fetch`, submodules are fetched without specifying the remote name, which means Git guesses which remote you want to fetch from, which is documented at https://git-scm.com/docs/git-fetch. I believe (I haven't reread this very closely) this is, in order:
- The remote of your branch, i.e. the value of the config value `branch.<name>.remote` - origin
This is why `git remote rename` matters, because `git remote rename` will also rename `branch.<name>.remote`. If you have a branch checked out in your submodule, you might want to double-check your .git/config.
But... I'll mention another wrinkle for completeness' sake (though I don't think it applies to you). If you fetch using `git submodule update`, the submodule is fetched using a _named_ remote, specifically:
- If the superproject has a branch checked out, it uses the name of the superproject branch's remote. - If the superproject does not have a branch checked out, it uses "origin".
> > Thanks, > Jake