【问题标题】:git - fetching from a specific branch although repository wasn't cloned with '--single-branch'git - 尽管没有使用“--single-branch”克隆存储库,但仍从特定分支获取
【发布时间】:2021-10-18 13:32:11
【问题描述】:

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

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

据我了解,我们首先需要使用 --depth=1 克隆 git 存储库,这是 Android 的“repo”工具支持的,但这对于我们需要加深获取的 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,因此我的问题在顶部。或者,如果有另一种方法可以加深对特定分支的提取 - 我很高兴知道详细信息。

谢谢!

【问题讨论】:

  • 谢谢,但实际上我已经尝试过了。即使在运行“repo init --depth=1”然后运行“repo sync --current-branch”时,调用“git fetch --deepen=1”时我仍然会遇到获取时间过长的问题。我假设“repo sync --current-branch”不会转换为“git clone --single-branch -branch”

标签: git git-fetch shallow-clone


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢!看起来它正在完成工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 2013-07-16
相关资源
最近更新 更多