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
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Sep 9, 2024, 09:13 UTC
- Message-ID
- <20fc64ed-24a1-45c0-928f-ddb4c6106262@gmail.com>
- In-Reply-To
- <CANrWfmS9PCKyK3X0rFnWfecrn-ETmcdtoPtA6j9QS7nTwfivKg@mail.gmail.com>
On 05/09/2024 23:24, Han Jiang wrote:
> 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.
Oh, I wonder if that is a feature or a bug? I see we don't sanity check the branch name either so we'll happily create refspecs containing any old rubbish. I'll send a patch series that fixes the original bug and checks the branch names later this week.
Best Wishes
Phillip
Show 112 quoted lines
> 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: >> >> 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 >>>