Git - 裸仓库不能有主分支的工作树 - 为什么?
Git - Bare repo cannot have a worktree for master branch - WHY?
我正在开发一些服务器端软件来进行合并。通过使用 git worktree
可以检查给定分支的裸仓库并将另一个分支合并到其中。它非常快,即使是大型存储库。
唯一的例外似乎是合并到 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)
...当然,该路径上没有工作树,只有您期望的裸回购文件。
更新: 我联系了 git 维护者,他们同意这可能是一个错误。我从他们那里得到了一个初步的补丁来测试。此外,我还能够在没有补丁的情况下重现 desired 行为。
在这一点上,我不完全确定边界条件或根本原因是什么,git 可能会提供修复。
我认为这是不正确的。您可能想向他们报告。我还找不到任何讨论,尽管情况似乎很明显。
作为解决方法,您可以 运行 git update-ref --no-deref HEAD 'HEAD^{commit}'
。它分离当前的 HEAD,这样 master 就不会被检出
原来这是 git 中的错误,从 2.5 及更高版本中的工作树实现开始。
裸存储库仍然有一个 HEAD reflink。 link 指向的任何内容都被 git(直到并包括 2.10)视为新克隆程序的默认分支,并且(错误地)被视为好像它在活动的工作树上。
我从 git 维护者那里收到了修复此行为的补丁,它似乎有效。或者,应该可以在 bare repo 上使用 update-ref 暂时从 master 切换。
我将测试这两个选项。
我正在开发一些服务器端软件来进行合并。通过使用 git worktree
可以检查给定分支的裸仓库并将另一个分支合并到其中。它非常快,即使是大型存储库。
唯一的例外似乎是合并到 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)
...当然,该路径上没有工作树,只有您期望的裸回购文件。
更新: 我联系了 git 维护者,他们同意这可能是一个错误。我从他们那里得到了一个初步的补丁来测试。此外,我还能够在没有补丁的情况下重现 desired 行为。
在这一点上,我不完全确定边界条件或根本原因是什么,git 可能会提供修复。
我认为这是不正确的。您可能想向他们报告。我还找不到任何讨论,尽管情况似乎很明显。
作为解决方法,您可以 运行 git update-ref --no-deref HEAD 'HEAD^{commit}'
。它分离当前的 HEAD,这样 master 就不会被检出
原来这是 git 中的错误,从 2.5 及更高版本中的工作树实现开始。
裸存储库仍然有一个 HEAD reflink。 link 指向的任何内容都被 git(直到并包括 2.10)视为新克隆程序的默认分支,并且(错误地)被视为好像它在活动的工作树上。
我从 git 维护者那里收到了修复此行为的补丁,它似乎有效。或者,应该可以在 bare repo 上使用 update-ref 暂时从 master 切换。
我将测试这两个选项。