【问题标题】:What difference does adding "--single-branch" make in git?在 git 中添加“--single-branch”有什么区别?
【发布时间】:2023-03-05 20:22:01
【问题描述】:

在使用 git clone -b <branch-name> <repo-name> 之前,我已经克隆了一个 repo 的单个分支,但最近看到 git clone --single-branch -b <branch-name> <repo-name> 被使用。

有什么区别?

【问题讨论】:

标签: git git-branch git-clone


【解决方案1】:

您使用的命令 (git clone -b <branch-name> <repo-name>) 会克隆整个 repo。 -b 选项在这里所做的唯一事情就是更改最初签出的内容。

--single-branch 更新默认 refspec,以便下载指定分支的历史记录(和相关数据)。

【讨论】:

    【解决方案2】:

    扩展一点 Mark Adelsberger 的回答(我已经赞成):请注意 git clone 实际上意味着:

    1. 创建一个新的全空目录,或者如果指示,接管现有的全空目录:

      git clone https://github.com/git/git
      

      将创建新目录git 来保存新的 Git 存储库。输入此目录以完成其余步骤;但是你的命令行解释器不在新目录中,所以克隆完成后,你必须自己进入新目录。

    2. 在这个空目录中运行git init,这样它现在就有一个.git 子目录来保存一个Git 存储库。新的 Git 存储库完全是空的(没有提交、没有分支等,尽管您在不存在的 master 分支上)。

    3. 运行git remote add origin <em>url</em>。例如,对于上述情况,Git 会添加一个名为 origin 的远程,告诉 Git 连接到 https://github.com/git/git

    4. 还需要运行任何额外的各种git config 命令。

    5. 运行git fetch origin

    6. 为一些名为branch的人运行git checkout <em>branch</em>

    如果您愿意,您可以手动运行这六个步骤,但git clone 更容易。

    现在您知道这六个步骤是什么,很容易解释 -b 参数 --single-branch 参数:

    • -b <em>branch</em> 在第 6 步中选择要传递给 git checkout 的参数。如果您不自己选择分支名称,您的 Git 将获得 他们的 Git 的推荐,在第 5 步中,并将使用该名称。

    • --single-branchgit config 命令添加到第 4 步。特别是,它更改了remote.origin.fetch 设置。

    git remote add 步骤将/将设置 remote.origin.fetch+refs/heads/*:refs/remotes/origin/*,这是对 git fetch 命令的指令(参见步骤 5)以获取 all 分支并重命名所有将它们发送到您的origin/* 远程跟踪名称。

    使用--single-branchgit clone 会覆盖默认值。这个 refspec 对的左侧不是+refs/heads/*,而是+refs/heads/<em>branch</em>。因此右侧是+refs/remotes/origin/<em>branch</em>,因此您的最终remote.origin.fetch 设置为:

    +refs/heads/<branch>:refs/remotes/origin/<branch>
    

    指示第 5 步中的git fetch以及所有未来的git fetch 操作更新您的origin/<em>branch</em> 远程跟踪名称。

    请注意,如果您没有事先专门选择某个分支,git clone 将使用其他 Git 在第 5 步中推荐的任何分支,以达到第 4 步的配置结果。这意味着实际上这些步骤并不完全按顺序排列:git clone 只是在内部最方便的地方执行每个部分。如果您出于某种原因想要手动执行此操作,则需要按此顺序执行六个步骤。 (不过,您可以使用 git remote add-t 选项来组合步骤 3 和 4,只要由于其他 git clone 选项而不需要任何其他特殊配置选项。)

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 2011-12-20
      • 2020-03-05
      • 2017-04-08
      • 2017-08-19
      • 2018-06-25
      • 2018-08-31
      • 2023-04-03
      相关资源
      最近更新 更多