git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: `git remote set-branches (without --add) <name> <branch>… ` does not add refspecs to `remote.<remote>.fetch` when `remote.<remote>.fetch` does not exist

From
Han Jiang <jhcarl0814@gmail.com>
Date
Sep 5, 2024, 22:24 UTC
Message-ID
<CANrWfmS9PCKyK3X0rFnWfecrn-ETmcdtoPtA6j9QS7nTwfivKg@mail.gmail.com>
In-Reply-To
<612756e2-fc84-4d49-9f74-ff1998f66f7c@gmail.com>

A way to get into the state is `git remote set-branches <remote>` (followed by zero <branch>es), which removes `remote.server.fetch` configuration variable. After that, `git remote set-branches <remote> <branch>…` does not work. (But `git remote set-branches --add` can be used to get out of the corrupted state.)

Shortened version of the example: git remote add server git@example.com git config list --local git remote set-branches server git config list --local git remote set-branches server branch1 branch2 git config list --local

On Thu, Sep 5, 2024 at 9:07 PM Phillip Wood <phillip.wood123@gmail.com> wrote:
Show 99 quoted lines
>
> On 03/09/2024 11:37, Han Jiang wrote:
> > Thank you for filling out a Git bug report!
> > Please answer the following questions to help us understand your issue.
> >
> > What did you do before the bug happened? (Steps to reproduce your issue)
>
> It is always helpful to show how to reproduce a bug but please try and
> aim for a minimal reproduction recipe. It is much easier to follow if
> you show which output lines come from which command. In this case one
> can reproduce the issue with
>
> $ git remote add test git@example.com
> $ git config --get-all remote.test.fetch
> +refs/heads/*:refs/remotes/test/*
> $ git config --unset-all remote.test.fetch
> $ git config --get-all remote.test.fetch
> $ git remote set-branches test main topic
> $ git config --get-all remote.test.fetch
>
> I haven't looked into what causes this. I wonder how likely users are to
> be affected - how did you get into a state where there was no fetch
> refspec set for your remote?
>
> Best Wishes
>
> Phillip
>
> > cd '/'; cd '/'; rm --force --recursive -- './test_git'; mkdir "$_"; cd "$_";
> > mkdir --parents -- './server' './client';
> > git -C './client' init './repo'
> > git -C './client/repo' remote --verbose
> > git -C './client/repo' config list --local --show-scope --show-origin
> > git -C './client/repo' remote add server 'file://'"$(realpath
> > './server/repo.git')"
> > git -C './client/repo' remote --verbose
> > git -C './client/repo' config list --local --show-scope --show-origin
> > git -C './client/repo' remote set-branches server branch1 branch2
> > git -C './client/repo' config list --local --show-scope --show-origin
> > git -C './client/repo' remote set-branches --add server branch3 branch4
> > git -C './client/repo' config list --local --show-scope --show-origin
> > git -C './client/repo' remote set-branches --add server branch3 branch4
> > git -C './client/repo' config list --local --show-scope --show-origin
> > git -C './client/repo' remote set-branches server
> > git -C './client/repo' config list --local --show-scope --show-origin
> > git -C './client/repo' remote set-branches server branch1 branch2
> > git -C './client/repo' config list --local --show-scope --show-origin
> > git -C './client/repo' remote set-branches --add server branch3 branch4
> > git -C './client/repo' config list --local --show-scope --show-origin
> > git -C './client/repo' remote set-branches --add server branch3 branch4
> > git -C './client/repo' config list --local --show-scope --show-origin
> >
> > What did you expect to happen? (Expected behavior)
> >
> > (local config has branch1 and branch2:)
> > remote.server.fetch=+refs/heads/branch1:refs/remotes/server/branch1
> > remote.server.fetch=+refs/heads/branch2:refs/remotes/server/branch2
> > remote.server.fetch=+refs/heads/branch3:refs/remotes/server/branch3
> > remote.server.fetch=+refs/heads/branch4:refs/remotes/server/branch4
> > remote.server.fetch=+refs/heads/branch3:refs/remotes/server/branch3
> > remote.server.fetch=+refs/heads/branch4:refs/remotes/server/branch4
> >
> > What happened instead? (Actual behavior)
> >
> > (local config does not have branch1 and branch2:)
> > remote.server.fetch=+refs/heads/branch3:refs/remotes/server/branch3
> > remote.server.fetch=+refs/heads/branch4:refs/remotes/server/branch4
> > remote.server.fetch=+refs/heads/branch3:refs/remotes/server/branch3
> > remote.server.fetch=+refs/heads/branch4:refs/remotes/server/branch4
> >
> > What's different between what you expected and what actually happened?
> >
> > Anything else you want to add:
> >
> > Please review the rest of the bug report below.
> > You can delete any lines you don't wish to share.
> >
> >
> > [System Info]
> > git version:
> > git version 2.46.0.windows.1
> > cpu: x86_64
> > built from commit: 2e6a859ffc0471f60f79c1256f766042b0d5d17d
> > sizeof-long: 4
> > sizeof-size_t: 8
> > shell-path: D:/git-sdk-64-build-installers/usr/bin/sh
> > feature: fsmonitor--daemon
> > libcurl: 8.9.0
> > OpenSSL: OpenSSL 3.2.2 4 Jun 2024
> > zlib: 1.3.1
> > uname: Windows 10.0 22631
> > compiler info: gnuc: 14.1
> > libc info: no libc information available
> > $SHELL (typically, interactive shell): C:\Program Files\Git\usr\bin\bash.exe
> >
> >
> > [Enabled Hooks]
> > not run from a git repository - no hooks to show
> >
Previous: Phillip WoodNext: Phillip Wood
Message 3 of 5 in “`git remote set-branches (without --add) <name> <branch>…​` does not add refspecs to `remote.<remote>.fetch` when `remote.<remote>.fetch` does not exist”
  1. Han JiangSep 3, 2024
  2. Phillip WoodSep 5, 2024
  3. Han JiangSep 5, 2024
  4. Phillip WoodSep 9, 2024
  5. Han JiangSep 10, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.