【问题标题】:Git - Bare repo cannot have a worktree for master branch - WHY?Git - 裸仓库不能有主分支的工作树 - 为什么?
【发布时间】:2017-02-14 10:20:47
【问题描述】:

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

唯一的例外似乎是合并到master。当我执行git worktree add /tmp/path/to/worktree master 时出现错误:

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

但这显然不是真的,git worktree list 给出:

/path/to/bare/repo(裸)

...当然,该路径上没有工作树,只有您期望的裸 repo 文件。

更新:我与 git 维护人员取得了联系,他们同意这可能是一个错误。我从他们那里得到了一个初步的补丁来测试。此外,我还能够在没有补丁的情况下重现 desired 行为。

在这一点上,我不完全确定边界条件或根本原因是什么,git 可能会提供修复。

【问题讨论】:

  • 从阅读文档看来,您可能需要传递 -b 选项来创建一个分支以使其工作。
  • 嗯。但是这个 repo 中有一个现有的 master 分支。错误消息似乎也证实了这一点。从我上面的描述中可能不清楚,但是这种方法与其他分支一起工作正常(没有错误消息),包括将 from master 合并到另一个分支。

标签: git version-control merge git-bare git-worktree


【解决方案1】:

原来这是 git 中的一个错误,从 2.5 及更高版本的工作树实现开始。

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

我从 git 维护者那里收到了一个补丁来修复这个行为,它似乎有效。或者,应该可以在裸 repo 上使用 update-ref 临时从 master 切换。

我将测试这两个选项。

【讨论】:

    【解决方案2】:

    我认为这是不正确的。您可能想向他们报告。虽然情况似乎很明显,但我还没有找到任何讨论。

    作为一种解决方法,您可以运行 git update-ref --no-deref HEAD 'HEAD^{commit}' 。它分离当前的 HEAD,使 master 不再被检出

    【讨论】:

      猜你喜欢
      • 2019-06-19
      • 2018-08-26
      • 2013-05-09
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 2015-07-12
      • 2021-05-27
      • 1970-01-01
      相关资源
      最近更新 更多