首页 > 解决方案 > git - 尽管没有使用“--single-branch”克隆存储库,但仍从特定分支获取

问题描述

长话短说,我正在寻找的是能够仅获取本地存储库中的特定分支,即使该存储库最初不是用“--single-branch -branch <branch_name>”克隆的.

分享完整的故事 - 我们想使用浅克隆来减少一般的 git 运行时间,特别是在我们的自定义 CI 工具中。另外我应该声明我们使用 Android 的“repo”工具。

据我了解,我们首先需要使用 Android 的“repo”工具支持的 --depth=1 克隆 git 存储库,但这对于我们的 CI 工具来说还不够,它需要加深获取以便能够从用户的存储库中提取更新时,有一个共同的 git 历史记录。因此,当我们尝试加深 fetch(为简单起见 - “git fetch --deepen=1”)时,git 会获取所有分支和标签,并花费大量运行时间这样做,尽管我们只需要加深 fetch 一次非常具体的分支。

如果 git 存储库最初是使用“--single-branch -branch”(除了--depth=1)克隆的,然后“git fetch --deepen=1”运行速度超快,则可以解决此问题。但问题是,Android 的“repo”工具似乎不支持使用“--single-branch -branch”克隆 git repos,因此我的问题在顶部。或者,如果有另一种方法可以加深对特定分支的获取 - 我很高兴知道细节。

谢谢!

标签: gitgit-fetchshallow-clone

解决方案


git remote命令具有面向用户的工具,用于转换为单分支克隆设置或从单分支克隆设置转换。具体参见set-branches子命令。

除此之外,您始终可以git fetch直接运行,同时传入--depth 一个或多个 refspec。单分支做的唯一一件事就是自动化 refspec。

您最好的选择可能仍然是首先修改repo您正在使用的工具(至少是可选的)--single-branch,因为您说使用此选项每次获取都可以节省大量资金。这将为您在初始获取时节省相同的成本(请记住,克隆包括git init在新的空目录中运行,根据需要配置各种其他 Git 命令,然后是git fetchand git checkout)。请注意,可以使用该选项或通过列出两个分支git remote将单分支克隆转换为“双分支克隆”(原样) 。--add


推荐阅读