【问题标题】:How to work on dev branch but keep master as default clone branch如何在 dev 分支上工作,但将 master 作为默认克隆分支
【发布时间】:2021-02-05 07:21:50
【问题描述】:

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

我希望允许人们克隆我的本地存储库并默认接收主分支,而不是在我将存储库签出到开发分支时明确要求它。

即允许人们“git clone /sapir/repo/.git”并接收​​主分支 即使 /sapir/repo 在那一刻实际上已在开发分支上签出。

有没有办法在不为自己保留第二份存储库副本的情况下实现这一点?

【问题讨论】:

  • 您在本地签出的分支不会影响克隆 repo 的人的默认分支。
  • 我猜你可以将 /sapir/repo 视为远程,在这种情况下,我直接在远程上工作,所以我称它为本地 repo,我的错。有没有办法让远程在dev分支上签出,但默认克隆分支是master,这就是问题

标签: git git-branch git-clone


【解决方案1】:

简短的回答是否定的。但是你设置了一个奇怪的情况:

  • 您有一些天真的用户,他们不知道当他们运行 git clone 时,他们正在选择让他们的 Git 创建哪个分支1 如果没有明确的选择,他们会选择让他们的 Git 创建您的 Git 推荐的分支。

  • 您是(或至少正在尝试成为)一个成熟的用户,他知道git clone 的工作原理,因此如果运行git clone 的人既不使用-n(以避免创建一个分支)或-b(选择要创建的内容),运行git clone 的人将从您自己的Git 中获取推荐。您自己的 Git 推荐您工作树中的 当前分支 中的任何一个分支,或者,如果此 Git 存储库是裸露的,则推荐当前的分支:即,存储在 HEAD 中的任何名称.

不过,作为一个老练的用户,您应该已经知道 Git:

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

了解这些事情后,您只需创建一个裸存储库,然后在本地克隆它和/或使用--reference 并在克隆中工作,而不是首先问这个问题。 ? 如果你有一些特殊和复杂的理由不使用裸存储库,你也可以使用git worktree add,前提是你的 Git 版本至少为 2.5(最好至少 2.15,以避免在git worktree 中出现一些棘手的错误)。


1请记住,git clone 复制 所有 提交2 但是没有 分支机构。复制提交后,git clone 的最后一步——除非被-n 禁止——是运行git checkout,然后创建一个 分支。这个新分支通常与克隆源中的分支名称相同这一事实很有趣且有用,但并不是特别重要,因为新克隆是一个单独的存储库,因此不em>需要使用相同的名称。

2更准确地说,它从将在新克隆中结束的所有名称中复制所有 可达 的提交:远程跟踪名称和标签名称,主要是.使用各种选项,例如--single-branch 和/或--no-tags,您可以选择这些名称中的哪一个将出现在克隆中。您还可以使用--depth--shallow-since 和类似选项创建浅克隆,以排除一些提交和相关对象。最近,您可以启用promisory packs,从而创建一个部分克隆,尽管这需要大量工作才能让更多用户使用。

【讨论】:

    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 2012-11-02
    • 2013-06-27
    • 2014-12-17
    • 1970-01-01
    • 2022-01-20
    • 2021-04-16
    • 2017-06-17
    相关资源
    最近更新 更多