Re: issue with submodules using origin remote unexpectadly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@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...

>
> 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?

> 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



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux