如何使用'git submodule'查看子模块的特定版本?

108 git version-control

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

joe*_*ler 144

子模块存储库保持指向特定提交的分离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
Run Code Online (Sandbox Code Playgroud)

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

# On branch dev [...]
#
#   modified:   submodule (new commits)
Run Code Online (Sandbox Code Playgroud)

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

  • 在我使用子模块的特定分支/版本提交父级仓库后,其他人可以在以后签出相同版本的子模块吗?或者,他们必须再次手动指定? (14认同)

fse*_*art 35

第1步:添加子模块

   git submodule add git://some_repository.git some_repository
Run Code Online (Sandbox Code Playgroud)

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

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

   git checkout -b some_branch origin/some_branch
Run Code Online (Sandbox Code Playgroud)

现在子模块固定在开发分支上而不是主控器的HEAD上.

两个人的争论 - 绑Git子模块到特定的提交或分支.

  • 使用`git submodule add -b some_branch git://some_repository.git some_repository`更容易 (18认同)
  • 此时,`git submodule add -b`似乎不能使用标签或sha1hash.它只能占用一个分支. (15认同)
  • 叹。这么多年过去了,他们仍然没有公共问题跟踪器。 (3认同)