Re: Bug in "revision.c: --all adds HEAD from all worktrees" ?
- From
Luke Diamand <luke@diamand.org>
- Date
- Nov 16, 2017, 01:06 UTC
- Message-ID
- <CAE5ih79wG3ws=OyXqvbd+QKyyAmM-D2JVO5r9G5VHtoOfiXdug@mail.gmail.com>
- In-Reply-To
- <xmqqtvxvyz3m.fsf@gitster.mtv.corp.google.com>
On 15 November 2017 at 22:08, Junio C Hamano <gitster@pobox.com> wrote:
Show 11 quoted lines
> Luke Diamand <luke@diamand.org> writes: > >> Quite a few of the worktrees have expired - their head revision has >> been GC'd and no longer points to anything sensible >> (gc.worktreePruneExpire). The function other_head_refs() in worktree.c >> bails out if there's an error, which I think is the problem. I wonder >> if it should instead just report something and then keep going. > > Am I correct to understand that your "git fsck" would fail because > these HEAD refs used by other stale worktrees are pointing at > missing objects?
git fsck says:
Checking object directories: 100% (256/256), done. Checking objects: 100% (1434634/1434634), done. error: HEAD: invalid reflog entry 7fa2b7ee4bc0d11529f659db8b13ed1f537d2a98 error: HEAD: invalid reflog entry 7fa2b7ee4bc0d11529f659db8b13ed1f537d2a98 error: HEAD: invalid reflog entry 7e79e09e8a7382f91610f7255a1b99ea59f68c0b error: refs/stash: invalid reflog entry feeb35e7b045d28943c706e761d0a2ac8206af2f error: refs/remotes/origin/master: invalid reflog entry 7fa2b7ee4bc0d11529f659db8b13ed1f537d2a98 Checking connectivity: 1419477, done. missing tree 1480c0a7ed2ad59ae701667292399c38d294658e missing tree ca2a01116bfbbd1fcbcf9812b95d8dc6c39e69d5 missing tree 5b7c41e547fc5c4c840e5b496da13d3daebc5fbe ... ...
> > What do you mean by "expired"? "Even though I want to keep using > them, Git for some reason decided to destroy them." or "I no longer > use them but kept them lying around."?
git worktree automatically prunes work trees:
"The working tree’s administrative files in the repository (see "DETAILS" below) will eventually be removed automatically (see gc.worktreePruneExpire in git-config(1)),"
In my case I didn't actually want them removed, but fortunately there's nothing important in them (there certainly isn't anymore...).
> > If the latter, I wonder "worktree prune" to remove the > admininstrative information for them would unblock you?
It doesn't seem to help.
$ git worktree prune -n <lists lots of unhappy trees> $ git worktree prune $ git fetch remote: Counting objects: 35, done. remote: Compressing objects: 100% (20/20), done. remote: Total 21 (delta 17), reused 5 (delta 1) Unpacking objects: 100% (21/21), done. fatal: bad object HEAD error: ssh://whatever/myrepol did not send all necessary objects $ /usr/bin/git-2.7.3 fetch <works fine>