Re: [bug] git clone: -c key=value missed when cloning submodules with --recurse-submodules

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

 



On Mon, Aug 11, 2025 at 10:52 AM ryenus <ryenus@xxxxxxxxx> wrote:
>
> Given 2 repositories, the 1st is "parent", with the 2nd as a submodule:
>
> * https://remote.host/parent
> * https://remote.host/submodule
>
> When cloning the parent repo with the below command:
>
>     git clone -c key=value --recurse-submodules https://remote.host/parent
>
> While "-c key=value" is properly applied when cloning the parent, it's
> missed when cloning the submodule.
>
> Here the actual key/value is something like "url.new.insteadOf=old" for
> authentication purpose.
>
> Fortunately the following works:
>
>     git -c key=value clone --recurse-submodules https://remote.host/parent
>
> Ideally the first form should also work.

I don't /think/ this is a bug: the manual for git(1) describes the form

    git -c <name>=<value> <command> [<args>]

as

       -c <name>=<value>
           Pass a configuration parameter to the command. The value given will
           override values from configuration files. The <name> is expected in
           the same format as listed by git config (subkeys separated by dots).

Meanwhile, the manual for git-clone(1) omits "-c" from the synopsis
(?), but does say

       -c <key>=<value>, --config <key>=<value>
           Set a configuration variable in the newly-created repository; this
           takes effect immediately after the repository is initialized, but
           before the remote history is fetched or any files checked out. The
           <key> is in the same format as expected by git-config(1) (e.g.,
           core.eol=true). If multiple values are given for the same key, each
           value will be written to the config file. This makes it safe, for
           example, to add additional fetch refspecs to the origin remote.

    [ some caveats omitted ]

So they are 2 different commands, and the position of "-c" matters.

All that said… upon a re-read, I see "this [config] takes effect […]
before the remote history is fetched." So let's take a look at the
omitted caveats:

           Due to limitations of the current implementation, some configuration
           variables do not take effect until after the initial fetch and
           checkout. Configuration variables known to not take effect are:
           remote.<name>.mirror and remote.<name>.tagOpt. Use the corresponding
           --mirror and --no-tags options instead.

Perhaps url.<name>.insteadOf deserves mention here?





[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