Thread (23 messages) flat view 23 messages, 5 authors, 2022-09-09

Re: 2.37.2 can't "git pull" but 2.18.0 can

From: Lana Deere <hidden>
Date: 2022-09-07 16:01:51

As you guessed, the only line is "not-for-merge".

$ cat .git/FETCH_HEAD
4a537c911d9b90f002b682badf9a9121f62622d7        not-for-merge   branch
'master' of http://githost:7990/scm/dp/sw

What does that mean?

.. Lana (lana.deere@gmail.com)


On Wed, Sep 7, 2022 at 8:59 AM Johannes Schindelin
[off-list ref] wrote:
quoted hunk ↗ jump to hunk
Hi Lana,

as per usual, replies inline.

On Tue, 6 Sep 2022, Lana Deere wrote:
quoted
The 'git ls-remote origin' command on both produces about 3600 lines
of output which appears to consist of all the branches in our repo.
The two outputs are identical according to diff.  Both include a
single mention of the switch-to-qt5 branch,

$ diff /tmp/ls-remote*
[no output here]
$ grep switch-to-qt5 /tmp/ls-remote.*
/tmp/ls-remote.2.18:6a9363081d05c313ba6a6ac59183193f1340bb1f
refs/heads/feature/switch-to-qt5
/tmp/ls-remote.2.37:6a9363081d05c313ba6a6ac59183193f1340bb1f
refs/heads/feature/switch-to-qt5

The 'git config -l' from both versions is almost the same - two lines
have moved around.
$ diff /tmp/config*
1,2d0
< filter.lfs.required=true
< filter.lfs.clean=git-lfs clean -- %f
4a3,4
quoted
filter.lfs.required=true
filter.lfs.clean=git-lfs clean -- %f
$ cat /tmp/config.2.37
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
filter.lfs.clean=git-lfs clean -- %f
user.name=Lana Deere
user.email=lana.deere@gmail.com
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
color.branch=false
color.diff=false
color.grep=false
color.interactive=false
color.pager=false
color.showbranch=false
color.status=false
color.ui=false
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=http://lana@githost:7990/scm/dp/sw.git
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master
At first I thought that this would be the root cause:
`feature/switch-to-qt5` is not included in the refs to fetch.

But then I added a test case for that specific scenario:

-- snip --
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index 081808009b2..6e6ddeb7e63 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -218,6 +218,17 @@ test_expect_success 'fail if upstream branch does not exist' '
        test_cmp expect file
 '

+test_expect_success 'fetch upstream branch even if refspec excludes it' '
+       git branch tirili &&
+       git branch tirili2 &&
+       git init -b tirili downstream &&
+       git -C downstream remote add -t tirili origin "file://$(pwd)/.git" &&
+       git -C downstream config branch.tirili.remote origin &&
+       git -C downstream config branch.tirili.merge refs/heads/tirili2 &&
+       git -C downstream pull 2>err &&
+       ! grep "configuration specifies to merge" err
+'
+
 test_expect_success 'fail if the index has unresolved entries' '
        git checkout -b third second^ &&
        test_when_finished "git checkout -f copy && git branch -D third" &&

-- snap --
And that test case passes!

The reason is that we specifically add the ref that needs to be merged to
the list of refs to be fetched:
https://github.com/git/git/blob/v2.37.2/builtin/fetch.c#L605-L614

Now, clearly it is not quite working as intended in your scenario. The
message you pasted is produced by the code in
https://github.com/git/git/blob/v2.37.2/builtin/pull.c#L421-L494, which is
only entered if there are no entries in `.git/FETCH_HEAD` except
`not-for-merge` ones.

Lana, would you mind pasting the contents of `.git/FETCH_HEAD` just after
a failed `git pull`?

Ciao,
Johannes
quoted
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.feature/switch-to-qt5.remote=origin
branch.feature/switch-to-qt5.merge=refs/heads/feature/switch-to-qt5


.. Lana (lana.deere@gmail.com)

On Fri, Sep 2, 2022 at 4:16 PM brian m. carlson
[off-list ref] wrote:
quoted
On 2022-09-02 at 19:27:55, Lana Deere wrote:
quoted
I'm testing an upgrade to git 2.37.2 from the current version we're
using of 2.18.0.  When I try to pull in my development tree, 2.37.2
gives me an error but 2.18.0 things all is fine:

$ /tools/linux-x86_64/git/2.37.2/bin/git pull
Your configuration specifies to merge with the ref
'refs/heads/feature/switch-to-qt5'
from the remote, but no such ref was fetched.

$ /tools/linux-x86_64/git/2.18.0/bin/git pull
From http://githost:7990/scm/dp/sw
 * branch                  feature/switch-to-qt5 -> FETCH_HEAD
Already up to date.

Anyone have any ideas about this?  All I could find on google was a
suggestion that the "no such ref" message indicates the remote branch
was deleted, but that's not the case here.
Can you provide the output of `git ls-remote origin` (assuming that's
the remote you're using) and `git config -l` (the latter with both
versions)?  I don't know of any reason why Git 2.37 should be broken in
this regard, but I suspect that there's a difference in configuration
between the two leading to this.
--
brian m. carlson (he/him or they/them)
Toronto, Ontario, CA
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help