我正在开发一些服务器端软件来进行 merge 。通过使用 git worktree
可以检查一个给定的分支以获得一个裸仓库并将另一个分支 merge 到其中。它非常快,即使是大型存储库也是如此。
唯一的异常(exception)似乎是 merge 到 master
。当我执行 git worktree add/tmp/path/to/worktree master
时,出现错误:
fatal: 'master' is already checked out at '/path/to/bare/repo'
但这显然不是真的,git worktree list
给出:
/path/to/bare/repo (bare)
...当然,该路径上没有工作树,只有您期望的裸 repo 文件。
更新:我联系了 git 维护者,他们一致认为这可能是一个错误。我从他们那里得到了一个初步的补丁来测试。此外,我还能够在没有补丁的情况下重现期望的行为。
在这一点上,我不完全确定边界条件或根本原因是什么,可能会有来自 git 的修复。
最佳答案
原来这是 git 中的一个错误,从 2.5 及更高版本中的工作树实现开始。
裸仓库仍然有一个 HEAD reflink。 git(直到并包括 2.10)将链接指向的任何内容视为新克隆程序的默认分支,并且(错误地)将其视为在事件工作树上。
我已经从 git 维护者那里收到了一个补丁来修复这个行为,它似乎可以工作。或者,应该可以在 bare repo 上使用 update-ref 暂时从 master 切换。
我将测试这两个选项。
关于Git - 裸仓库不能有主分支的工作树 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39882988/