Hello everyone, Appreciate your time and effort on developing and supporting the tool! I hope you can help me understand how to work with new behavior introduced in 2.51.
We parse output of ‘git fetch’ command in Bitbucket - in automation that synchronizes mirrors. And from the output we see what references were successfully updated and what failed.
In 0e358de (fetch: use batched reference updates) ‘git fetch’ started to use batched reference updates. Which is a great improvement by itself, and required the change in 'git fetch' output.
With git 2.50, when repositories had directory/file ref conflicts, the
errors were explicit:
$ git fetch
error: cannot lock ref 'refs/remotes/origin/branch_path':
'refs/remotes/origin/branch_path/conflict' exists; cannot create
'refs/remotes/origin/branch_path'
From /Users/stsymbal/repos/git-conflict-test/first/../first
! [new branch] branch_path -> origin/branch_path (unable to
update local ref)
error: some local refs could not be updated; try running
'git remote prune origin' to remove any old, conflicting branchesAnd git 2.51, in the same situation, no longer tells what ref failed:
$ git fetch
From /Users/stsymbal/repos/git-conflict-test/first/../first
* [new branch] branch_path -> origin/branch_path
error: some local refs could not be updated; try running
'git remote prune origin' to remove any old, conflicting branchesIt is trivial in case of a single ref being fetched, but when fetching many refs there is no obvious way to see which one failed. For other errors there will be a single error message per ref, but not for directory/file conflict. The 'reference-transaction' hook also lists all references as committed.
Is it expected behavior moving forward? Can you suggest any workarounds to know what refs were successful / failed?
Reproducible example:
mkdir first && cd first
git init -b main
git commit --allow-empty -m "initial commit"
git clone ../first ../second
git switch -c branch_path
git commit --allow-empty -m "another commit"
cd ../second
git update-ref refs/remotes/origin/branch_path/conflict HEAD
git fetchThanks!