On Tue, Oct 4, 2022 at 11:12 AM Glen Choo <chooglen@xxxxxxxxxx> wrote: > > Hi Jacob! Thanks for the report! > Thanks for responding! > I think we'd need a bit more info, specifically: > > - How did you rename the remote? > - What command is doing the submodule fetch? > I am doing a git pull --rebase in the superproject, and I renamed the remote in the submodule using git remote rename. > Or, if you could include a reproduction script, that would be really > helpful :) > I'm not sure how to do this, because it is only an intermittent failure. I suspect it has to do with when the submodule actually needs to update. Perhaps I can come up with something though. If I can, I'll send it as a new test. > Jacob Keller <jacob.keller@xxxxxxxxx> writes: > > > 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... > I renamed it using git remote rename. > > > > 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? > Its git pull --rebase, but I suppose as part of this it will run something equivalent to git fetch? > > 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. > Hmm. > 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` So basically if its checked out to a branch it will fetch from the remote of that branch, but... > - origin > It defaults to origin, so if you have the usual "checked out as a detached head" style of submodule, it can't find the remote branch. > 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. > I do not have a branch checked out, I have it checked out as detached head, as is the usual style for "git submodule update" would do. > 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. Right, so that explains why I can re-run git submodule update after a git pull --rebase and it works. In theory wouldn't it make more sense to use the remote based on the URL of the .gitmodules file? > - If the superproject does not have a branch checked out, it uses > "origin". > I suppose one option would be to make this configurable. I started using "upstream" as the default remote name for most of my repositories when I began working with forks a lot more. > > > > Thanks, > > Jake