如何在开发分支上工作,但将master保留为默认克隆分支

时间:2020-10-22 09:37:43

标签: git git-branch git-clone

我有一个本地存储库,用于开发某些功能。 我想分享该功能,同时继续对其进行开发。 为此,我想要一个开发分支。

我想允许人们克隆我的本地仓库,并默认情况下接收master分支,而不必在我将仓库签到开发分支的情况下明确要求它。

即允许人们“ git clone /sapir/repo/.git”并接收​​master分支 即使/ sapir / repo当时实际上已在开发分支中签出。

有没有一种方法可以在不为我自己保留第二个存储库副本的情况下实现?

1 个答案:

答案 0 :(得分:2)

简短的回答是“否”。但是您设置了一个奇怪的情况:

  • 您有一些幼稚的用户,他们不知道他们在运行git clone时,他们正在选择要创建其Git的分支 1 他们没有明确的选择,而是选择让自己的Git创建您的Git推荐的分支。

  • 您是(或者至少打算成为)高级用户,他们了解git clone的工作原理,因此知道如果运行git clone的人既不使用{ {1}}(完全避免创建分支)或-n(选择创建内容),运行-b的人都会从您自己的Git中获得建议。您自己的Git建议您工作树中 current分支的哪个分支,或者,如果该Git存储库是空的,则该分支是当前的:即,{{1 }}。

但是,作为高级用户,您应该已经知道Git:

  • 可以在本地使用硬链接,也可以使用git clone和替代机制共享对象存储;
  • 应该有一个裸仓库来接收HEAD指令;
  • 因此,不需要任何活动的工作树,因此您可以在该裸仓库的--reference中存储所需的任何内容。

请注意,您只需建立一个裸存储库,然后在本地和/或使用git push对其进行克隆,然后在克隆中进行操作,而无需首先提出此问题。 ?如果您出于某些特殊且复杂的原因不使用裸仓库,也可以使用HEAD,前提是您的Git版本至少为2.5(最好至少为2.15,以避免在--reference中出现一些棘手的错误)。


1 请记住,git worktree add复制了 全部 commits 2 ,但 分支。复制提交后,git worktree的最后一步(除非通过git clone禁止)是运行git clone,并且创建一个 new < / em>分支。这个新分支与克隆源中的分支名称通常具有相同的名称这一事实是有趣且有用的,但并不是特别重要,因为新克隆是一个单独的存储库,因此不会< em>需要使用相同的名称。

2 更准确地说,它从新克隆中出现的所有名称中复制所有可到达的 提交:远程跟踪名称和标记名称,主要是。使用各种选项,例如-n和/或git checkout,您可以选择这些名称中的哪一个出现在克隆中。您还可以使用--single-branch--no-tags以及类似的选项创建浅表克隆,以排除某些提交和相关对象。最近,您可以启用优惠包,从而创建部分克隆,尽管这需要大量的工作才能使其对更多用户有用。

相关问题