如何使用“ git submodule”签出特定版本的子模块?


Answers:


167

子模块存储库处于指向特定提交的分离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)

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


14
在提交带有子模块的特定分支/版本的父仓库后,其他人将来可以签出相同版本的子模块吗?还是必须再次手动指定?
QZHua

@QZHua:我自己进行了尝试,克隆了父级时似乎保留了子模块的提交ID。
Psychonaut

37

步骤1:添加子模块

   git submodule add git://some_repository.git some_repository

步骤2:将子模块固定为特定提交

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

   git checkout -b some_branch origin/some_branch

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

两个人争论—领带Git子模块到特定的提交或分支


20
更容易使用git submodule add -b some_branch git://some_repository.git some_repository
Caumons

15
目前,似乎git submodule add -b无法使用标签或sha1hash。它只能取一个分支。
CMCDragonkai '16

Git问题追踪器中是否存在此问题?有人会张贴网址以便我们进行跟踪吗?谢谢。
科兰

@colan报告错误的说明位于git-scm.com/community。但是-b的支持分支而不是标签或提交shas是一个功能而非错误(实际上-b是的简写--branch)。
亨利

1
叹。这些年来,他们仍然没有公共问题追踪器。
科兰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.