【问题标题】:How to clone a remote git repository such that all branches will be downloaded如何克隆远程 git 存储库,以便下载所有分支
【发布时间】:2021-10-08 07:50:07
【问题描述】:

我是 Git 新手,还在学习它。
我正在尝试将名为 hello-world 的 Git 远程存储库克隆到我的本地计算机。

在远程(本例中为 github)上,存储库有两个分支

  1. Main
  2. Branch1

但是当我克隆这个存储库并输入命令git branch 时,它只显示main 分支。

我了解到,使用 --branchclone 命令,我可以告诉 git 显式下载另一个分支而不是默认分支。它按预期工作,所以当我git clone https://github.com/ShivMahla/hello-world.git --branch branch1 时,git 下载带有branch1 的存储库,但是这次我发现main 在我使用git branch 命令时丢失了。

请告诉我我做错了什么。

我希望两个分支都应该进入我的本地系统,当我使用 git branch 命令时,它应该向我显示两个条目

  1. 主/主
  2. 分支1

我需要为此在 GitHub 帐户中进行任何设置吗?

【问题讨论】:

  • 嗯,当我输入该评论时它没有。但我不坚持。

标签: git git-branch git-remote


【解决方案1】:

简短版:

git clone https://github.com/<me>/<myRepo>
cd myRepo
git switch branch1

来自git switch man page

如果没有找到&lt;branch&gt;,但在一个远程(称为&lt;remote&gt;)中确实存在一个具有匹配名称的跟踪分支,则视为等同于

$ git switch -c <branch> --track <remote>/<branch>

在您的情况下,origin/branch1 确实存在,因此切换到 branch1 将自动跟踪 origin/branch1

git branch 将向您显示两个本地分支机构。
git branch -avv 将向您显示本地和远程跟踪分支。

【讨论】:

    【解决方案2】:

    这里有很多,但让我们从两件事开始:

    1. GitHub 不是 Git。 GitHub 是一个站点,可让您存储 Git 存储库,并添加 一些基本 Git 中不存在的功能。

    2. 您的问题与基本 Git 有关。这就是您需要首先(或同时)学习的内容。您用四个标签标记了您的问题:。这在这一点上是不合适的,因为您真正的问题是关于 Git 的基本问题。我会剪掉除 标签之外的所有标签。

    还有很多关于 Git 的知识,但让我们从这一件事开始:当您在命令行上使用git clone 克隆现有的 Git 存储库时,通常会得到 all em> 个提交,none 个分支。 但是您的 git clone 命令在将控制权返回给您之前结束,通过:

    • 创建 你的克隆中的一个分支。这个分支名称是你的。它不是其他 Git 的分支名称。随心所欲。

    • “检查”这一分支。这会导致正常的 attached HEAD 状态。

    您的 Git 创建的分支名称 是您在命令行中提供的名称:-b branch1,例如,告诉您的 Git 创建一个本地分支名称 branch1

    如果您不提供 -b 参数,您的 Git 会询问他们的 Git(持有您要克隆的存储库的 Git)他们推荐哪个分支名称。他们倾向于推荐名为 mainmaster 的分支,详细信息取决于“他们”到底是谁以及那里的配置方式。

    上述规则有很多例外。例如,您可以为 -b 参数提供一个 tag 名称;当你这样做时,你的 Git 会创建 no 分支,如果没有分支,你就不能处于正常的“附加 HEAD”状态,所以你会留在 分离的 HEAD状态,使用标签名称。 (与分支名称不同,标签名称在多个不同的克隆之间共享。)幸运的是,您没有这样做,因此我们不必担心。 完全为空的存储库还有一个棘手的问题,或者您可以使用不创建任何分支的标志进行克隆,但同样,您没有这样做并且我们不必担心。

    要做这里需要知道的是,在您的 Git 从 GitHub 上的其他 Git 复制所有 commits 之后,您的 Git 会获取他们所有的 分支名称——例如branch1main——并且将这些名称更改为远程跟踪名称。在这种情况下,您的 Git 将他们的 main 转换为您的 origin/main,并将他们的 branch1 转换为您的 origin/branch1。然后,您的 Git 会创建或更新这些 remote-tracking 名称,以记住 他们的 Git 通过他们的 branch 名称记住的相同提交哈希 ID。

    这里的要点是您的 Git 将它们的 branch 名称转换为您的 remote-tracking 名称。因此,即使您的 Git 存储库中有数百个分支,您的 -b 参数也只会得到一个 branch 名称。 您的 Git 可以从任何一个分支创建一个新的分支名称稍后,如果您选择这样做,您的远程跟踪名称。

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 2011-02-02
      • 2010-09-09
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多