【问题标题】:How do I check out a specific version of a submodule using 'git submodule'?如何使用“git submodule”检查子模块的特定版本?
【发布时间】:2012-06-10 10:58:40
【问题描述】:

如何为特定标签或提交添加 Git 子模块?

【问题讨论】:

标签: git version-control git-submodules


【解决方案1】:

第一步:添加子模块

   git submodule add git://some_repository.git some_repository

第 2 步:将子模块修复到特定的提交

默认情况下,新子模块将跟踪主分支的 HEAD,但不会在您更新主存储库时更新。为了更改子模块以跟踪特定的提交或不同的分支,请将目录更改为子模块文件夹并像在普通存储库中一样切换分支。

   git checkout -b some_branch origin/some_branch

现在子模块固定在开发分支上,而不是 master 的 HEAD。

来自Two Guys Arguing — Tie Git Submodules to a Particular Commit or Branch

【讨论】:

  • 使用更方便git submodule add -b some_branch git://some_repository.git some_repository
  • 目前看来git submodule add -b 不能接受标签或sha1hash。它只能取一个分支。
  • Git 问题跟踪器中是否存在此问题?有人会发布一个 URL 以便我们跟踪它吗?谢谢。
  • @colan 报告错误的说明位于git-scm.com/community。但是-b 的支持分支而不是标签或提交 shas 是一个特性而不是一个错误(实际上-b--branch 的简写)。
  • 叹息。这么多年过去了,他们仍然没有公共问题跟踪器。
【解决方案2】:

子模块存储库处于分离的 HEAD 状态,指向特定的提交。更改该提交只需签出不同的标签或提交,然后将更改添加到父存储库。

$ cd submodule
$ git checkout v2.0
Previous HEAD position was 5c1277e... bumped version to 2.0.5
HEAD is now at f0a0036... version 2.0

父存储库上的git-status 现在将报告脏树:

# On branch dev [...]
#
#   modified:   submodule (new commits)

添加子模块目录并提交以存储新指针。

【讨论】:

  • 在我使用子模块的特定分支/版本提交父仓库后,其他人将来可以签出相同版本的子模块吗?或者,他们必须再次手动指定?
  • @QZHua:我自己尝试过,似乎在克隆父模块时保留了子模块的提交ID。
  • 在这里我们进入了黑暗区域......我可以提交到我的本地 git,......但也许不能推送到原点......这可能会导致这个不可共享...... ......经验告诉......当心!如果子模块变化很大会出问题
猜你喜欢
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 2022-12-08
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 2011-03-14
相关资源
最近更新 更多