Git - Bare repo不能拥有主分支的工作树 - 为什么?

mtu*_*tty 14 git version-control merge git-bare git-worktree

我正在研究一些服务器端软件来进行合并.通过使用git worktree它可以检查给定分支的裸仓库并将另一个分支合并到其中.即使有大型存储库,它也非常快.

唯一的例外似乎是合并master.当我这样做时,git worktree add /tmp/path/to/worktree master我收到一个错误:

致命:'master'已在'/ path/to/bare/repo'检出

但这显然不正确,git worktree list给出:

/ path/to/bare/repo(bare)

...当然,在那条路上没有工作树,只有你期望的裸仓库文件.

更新:我与git维护者联系,他们同意这可能是一个错误.我有一个初步补丁来测试.此外,我还能够在没有补丁的情况下重现所需的行为.

在这一点上,我不完全确定边界条件或根本原因是什么,并且可能会有来自git的修复.

mtu*_*tty 8

事实证明这是git中的一个错误,从2.5及更高版本的worktree实现开始.

裸存储库仍然有一个HEAD reflink.无论该链接指向什么,git(最多包括2.10)都被认为是新克隆者的默认分支,并且(错误地)将其视为在活动工作树上.

我收到了来自git维护者的补丁来修复这种行为,它似乎有效.或者,应该可以在裸仓库上使用update-ref暂时从master切换.

我将测试这两个选项.