{"thread":{"id":"58435","subject":"[Bug] Behavioral change in git clone --depth=1 --recurse-submodule","startedAt":"2022-09-15T12:23:19Z","lastAt":"2022-09-15T12:23:19Z","messageCount":1,"participants":["Tadeus Prastowo"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"463037","messageId":"VI1PR02MB6301891F2C862773918CB659FD499@VI1PR02MB6301.eurprd02.prod.outlook.com","threadId":"58435","inReplyTo":null,"subject":"[Bug] Behavioral change in git clone --depth=1 --recurse-submodule","fromName":"Tadeus Prastowo","fromEmail":"tadeus.prastowo@praim.com","sentAt":"2022-09-15T12:23:08Z","receivedAt":"2022-09-15T12:23:19Z","isPatch":false,"sender":{"key":"tadeus.prastowo@praim.com","avatar":null},"body":"Hello,\n\nFirst of all, please keep me in CC as I am not subscribed to the mailing list.\n\nExpected result when using Ubuntu Focal 20.04 LTS:\n\n$ git --version\ngit version 2.25.1\n$ git clone --verbose --depth=1 --recurse-submodules=<submodule path> -b <branch name> ssh://<user name>@<server name>/<repo path>\nCloning into '<repo name>'...\nremote: Counting objects: <number A>, done.\nremote: Compressing objects: 100% (<number B>/<number B>), done.\nremote: Total <number A> (delta <number F>), reused <number C> (delta <number D>)\nReceiving objects: 100% (<number A>/<number A>), <number U> MiB | <number V> MiB/s, done.\nResolving deltas: 100% (<number F>/<number F>), done.\nUpdating files: 100% (<number G>/<number G>), done.\nSubmodule '<submodule path>' (ssh://<user name>@<server name>/<submodule path>) registered for path '<submodule path>'\nCloning into '<submodule absolute path>'...\nremote: Counting objects: <IMPORTANT A>, done.\nremote: Compressing objects: 100% (<number H>/<number H>), done.\nremote: Total <IMPORTANT A> (delta <number I>), reused <number J> (delta <number K>)\nReceiving objects: 100% (<IMPORTANT A>/<IMPORTANT A>), <number X> MiB | <number Y> MiB/s, done.\nResolving deltas: 100% (<number I>/<number I>), done.\nSubmodule path '<submodule path>': checked out '<OID>'\n\nProblem observed when using the same Ubuntu Focal 20.04 LTS machine but using a different working directory:\n\n$ sudo add-apt-repository ppa:git-core/ppa\n$ sudo aptitude install git\n$ git --version\ngit version 2.37.3\n$ git clone --verbose --depth=1 --recurse-submodules=<submodule path> -b <branch name> ssh://<user name>@<server name>/<repo path>\nCloning into '<repo name>'...\nremote: Counting objects: <number A>, done.\nremote: Compressing objects: 100% (<number B>/<number B>), done.\nremote: Total <number A> (delta <number F>), reused <number C> (delta <number D>)\nReceiving objects: 100% (<number A>/<number A>), <number Q> MiB | <number R> MiB/s, done.\nResolving deltas: 100% (<number F>/<number F>), done.\nUpdating files: 100% (<number G>/<number G>), done.\nSubmodule '<submodule path>' (ssh://<user name>@<server name>/<submodule path>) registered for path '<submodule path>'\nCloning into '<submodule absolute path>'...\nremote: Counting objects: <IMPORTANT B>, done.\nremote: Compressing objects: 100% (<number L>/<number L>), done.\nremote: Total <IMPORTANT B> (delta <number M>), reused <number N> (delta <number O>)\nReceiving objects: 100% (<IMPORTANT B>/<IMPORTANT B>), <number W> MiB | <number Z> MiB/s, done.\nResolving deltas: 100% (<number M>/<number M>), done.\nerror: Server does not allow request for unadvertised object <OID>\nfatal: Fetched in submodule path '<submodule path>', but it did not contain <OID>. Direct fetching of that commit failed.\n\n[Analysis of the Problem]\n\nI can see that the number <IMPORTANT A> is also reported when running (regardless of the git version):\ngit clone --verbose --recurse-submodules ssh://<user name>@<server name>/<submodule path>\n\nAnd, I can see that the number <IMPORTANT B> is also reported when running (regardless of the git version):\ngit clone --verbose --recurse-submodules --single-branch -b master ssh://<user name>@<server name>/<submodule path>\n\nIn other words, while git version 2.25.1 respects what the `git-clone' man page says about the option `--recurse-submodules', git version 2.37.3 does not, quoting https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---recurse-submodulesltpathspecgt:\n\nSubmodules are initialized and cloned using their default settings. This is equivalent to running git submodule update --init --recursive <pathspec> immediately after the clone is finished.\n\nEnd quote.\n\n[The Bug]\n\nThe option `--recurse-submodules' is no longer equivalent to \"running git submodule update --init --recursive <pathspec>\" in git version 2.37.3.\n\nNow this report can be regarded as reporting a bug in the documentation, which is correct.\n\nBut, it is my desire for this report to be regarded as reporting a bug in git, especially because other people have reported a specific deficiency in git submodule: the branch information given in .gitmodules is not used when git wants to use the option `--single-branch' on a submodule (see https://lore.kernel.org/git/CANNNLMC_XEqjYPOig+pbqrS30dPCTmcDSev6yg+5EEBkJCaaig@mail.gmail.com/ and the StackOverflow answer refered therein https://stackoverflow.com/a/61492323).\n\nIn other words, it is my desire to see not only the documentation be fixed but also git submodule to use the branch information specified in .gitmodules when using the option `--single-branch' on a submodule when cloning a repository by specifying the options `--recurse-submodules' and `--depth'.\n\nThank you.\n\n-- \nBest regards,\nTadeus"}]}