【问题标题】:Can I create a worktree for an empty Git repo?我可以为空的 Git 存储库创建工作树吗?
【发布时间】:2021-08-09 14:06:59
【问题描述】:

我有一个空的 Git 存储库(即它还没有包含任何提交)。有没有办法为这个 repo 使用git worktree add 命令(带有--no-checkout 选项)创建工作树?我的意思是指示 Git 不要将新创建的工作树与任何 HEAD 关联。

【问题讨论】:

  • 您希望该工作树包含什么?您的存储库中还没有 tree 对象,因此没有可导出的内容。
  • 我希望工作树为空白,即与主工作树在 git init 之后的状态相同。
  • 我认为没有办法,因为没有任何东西(没有提交 ID,没有树 ID,没有标签,没有分支)可以想象这个工作树可以跟踪。您始终可以创建一个空提交来引导您的存储库,然后从那里开始分支。
  • 没错。只需进行占位符提交即可。 git worktree add somepath $(git commit-tree -m placeholder `git mktree <&-`) 现在你有一个空的工作树,你可以稍后填写。

标签: git git-worktree


【解决方案1】:

在完全空的存储库中,不能有分支,因为每个分支名称​​必须标识一个实际的现有提交。1 但是,主工作树必须是某个分支上。所以 Git 将它放在一个不存在的分支上,Git 将其称为 unborn 分支(在各种消息和内部代码中)和 orphan 分支(在像 @987654321 这样的标志中@)。

理论上,git worktree add 也可以允许--orphan 在未出生的分支上放置新的工作树。但是,它目前不这样做。如果您希望为 Git 编写允许它执行此操作的新代码,并将其发送给 Git 维护人员,它可能是包含在未来 Git 版本中的候选者。包含某种相当有说服力的用例可能是个好主意。

在此之前,您不能这样做:您必须至少进行一次初始提交(然后允许创建无限数量的分支名称)。


1这个约束有点武断,但 Git 无论如何都会做到,所以必须忍受它(或重写 Git)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    相关资源
    最近更新 更多