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

`git fetch --refmap=<refspec>… <repository> <refspec>…​` providing NON-empty <refspec> to the --refmap ALSO causes Git to ignore the configured refspecs

From
Han Jiang <jhcarl0814@gmail.com>
Date
Sep 4, 2024, 04:09 UTC
Message-ID
<CANrWfmSe0ekbRR9VsX8jALWQQVdhDv-2WTSm47jHTiV9-Z7-pg@mail.gmail.com>

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)

cd '/'; cd '/'; rm --force --recursive -- './test_git'; mkdir "$_"; cd "$_"; mkdir --parents -- './server' './client'; git -C './server' init --bare './repo.git' git --git-dir='./server/repo.git' --work-tree='.' commit --allow-empty -m "$((++number))" git -C './server/repo.git' branch branch1; git -C './server/repo.git' branch branch2

git -C './client' init './repo' 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' fetch --dry-run git -C './client/repo' fetch --dry-run --refmap='+refs/heads/*:refs/remotes/server/*' server branch1 branch2 git -C './client/repo' fetch --dry-run --refmap='+refs/heads/branch*:refs/remotes/server/branch*' server branch1 branch2 git -C './client/repo' fetch --dry-run --refmap='+refs/heads/branch1:refs/remotes/server/branch1' server branch1 branch2 git -C './client/repo' fetch --refmap='+refs/heads/branch1:refs/remotes/server/branch1' server branch1 branch2 git -C './client/repo' branch --list --all --verbose --verbose

What did you expect to happen? (Expected behavior)

In `git fetch --refmap='+refs/heads/branch1:refs/remotes/server/branch1' server branch1 branch2`, `remote.server.fetch=+refs/heads/*:refs/remotes/server/*` merges with `--refmap='+refs/heads/branch1:refs/remotes/server/branch1'`, so these should be what would be done: branch1 -> server/branch1 branch2 -> server/branch2

What happened instead? (Actual behavior)

In `git fetch --refmap='+refs/heads/branch1:refs/remotes/server/branch1' server branch1 branch2`, `remote.server.fetch=+refs/heads/*:refs/remotes/server/*` is replaced by `--refmap='+refs/heads/branch1:refs/remotes/server/branch1'`, so these are what would be done: branch1 -> server/branch1

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

Next: Johannes Sixt
Message 1 of 8 in “`git fetch --refmap=<refspec>… <repository> <refspec>…​` providing NON-empty <refspec> to the --refmap ALSO causes Git to ignore the configured refspecs”
  1. Han JiangSep 4, 2024
  2. Johannes SixtSep 4, 2024
  3. Han JiangSep 4, 2024
  4. Johannes SixtSep 4, 2024
  5. Junio C HamanoSep 4, 2024
  6. Han JiangSep 4, 2024
  7. Junio C HamanoSep 4, 2024
  8. Han JiangSep 4, 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.