使用git clone --depth 1克隆repo后,如何获取远程分支

时间:2017-10-18 12:02:59

标签: git

我的回购历史悠久,所以我克隆了

git clone <url> --depth 1

现在我在主分公司。<​​/ p>

如何获取名为&#39; feature / my-feature&#39;的远程分支。那是早先支持3次提交?

我试过了:

git checkout -b feature/my-feature  origin/feature/my-feature

git fetch -all

但我仍然只看到主分支

2 个答案:

答案 0 :(得分:2)

您可以通过指定获取深度来尝试强制它:

git fetch --depth=999999

深度是提交的数量。请注意,当您执行克隆时,clone实际上会进行提取,深度与提取中指定的深度相同。

如果需要,请将该数字设为更大!

修改

此外,您可以/可能应该使用加深 - 相同的语法,但它有效地从您最后指定的深度停止的位置获取..所以它更有效:

git fetch --deepen=999999

这可能取决于你的git版本,但最后一个....

编辑2

在我查看git docs时看到了这个......

git fetch --unshallow

这将是最好的方法(不确定它在哪个版本中实现,我没有尝试过......但看起来像是要使用的东西)。

答案 1 :(得分:2)

TL; DR

您需要:

git config --add remote.origin.fetch \
    +refs/heads/feature/my-feature:refs/remotes/origin/feature/myfeature

或:

git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

其次是:

git fetch
git fetch --depth=<number>
git fetch --deepen=<number>
git fetch --unshallow

解释

当你做一个浅层克隆时,Git会调整两个的东西:

  • 要获取和更新的默认分支或标签集;和
  • 初始获取的深度。

(正在运行git clone是一个简写,用于执行包含git initgit remote addgit fetch和{{1}的一长串Git命令如有必要,可能会使用更多命令。)

特别是,git checkout具有添加--depth 1的副作用。如果您还没有使用明确的--single-branch取消注销,Git会配置--no-single-branch行,就好像您已经运行:

fetch

这告诉以后的git config remote.origin.fetch +refs/heads/<branch>:refs/remotes/origin/<branch> 命令只带来 给定的git fetch,而不是其他人。

普通(非浅,非单支)<branch>使用默认设置:

git clone

告诉每个以后的git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*' 带来每个分支。

然后,将所有未来的git fetch操作配置为单分支,浅层克隆使用指定的fetch进行提取,使用名为--depth的文件插入特殊的“移植”条目。这些会影响克隆的整体有用性(但在任何现代Git中都要少得多);有关详情,请参阅Is it safe to shallow clone with --depth 1, create commits, and pull updates again?但是,请注意,此保留.git/shallow号码。它只是缩短了初始提取时间。未来提取的行为,特别是那些使用不同引用名称的行为,很难从中预测。

如果您运行--depth,Git会找到所有浅层截止点,并在此之前重新获取所有历史记录。然后Git完全删除了特殊的git fetch --unshallow文件,克隆的行为就像一个非浅的克隆。这与克隆是否表现得像.git/shallow克隆无关。

如果您使用特定--single-branchgit fetch运行--depth,Git会根据需要设置新的浅层截止值,以将深度设置为您指定的数字,或者增加任何现有数量由您指定的数字浅切断。如果有多个分支,它们的各种截止之间的关系是复杂的(它都是基于图形行走而没有代码检查或测试,很难说Git在一些棘手的情况下会如何表现)。