Git - 裸仓库不能有主分支的工作树 - 为什么?

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

我正在开发一些服务器端软件来进行 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/

相关文章:

git - 不要重复自己的 git 修订范围语法?

git - 恢复压缩提交中的提交之一?

linux - Nginx 配置版本控制策略

r - 快速连接data.table(潜在bug,上报前检查)

TFS合并冲突

git - merge 时 git 按什么顺序应用文件修改?

android - 如何在 repo list 中为单个 git 存储库指定两个远程提取?

svn - 无缝 git svn 设置

ios - SVN 显示版本为 1 :74M and svn log is empty apart from initial import?

git - 如何识别需要在 git 中 merge 的分支